WCOW 中数据卷不复制容器文件的问题
WCOW 中数据卷不复制容器文件的问题
此内容年代久远,谨慎参考

WCOW:Windows Container On Windows,又名 Docker Enterprise Edition。

LCOW:Linux Container On Windows,即是基于 HyperV 的虚拟机方式创建的容器环境,傻逼设计。

LCOL:Linux Container On Linux。

众所周知,当使用 --volume 开关挂载数据卷时,如果数据卷为空,且容器挂载点不为空,那么就会把容器挂载点的所有文件都复制到数据卷中。

由于 MySQL 未提供官方的 windows 容器镜像,于是我打算自己打包一个。使用如下 Dockerfile,是从官方镜像 debian 版改的。

dockerfileFROM mcr.microsoft.com/windows/nanoserver:1809
WORKDIR c:\app
USER ContainerUser
EXPOSE 3306
COPY bin c:\app\bin
COPY ini.d c:\app\ini.d
COPY share c:\app\share
COPY my.ini c:\app\my.ini
COPY LICENSE c:\app\LICENSE
COPY README c:\app\README
LABEL org.opencontainers.image.authors="ragnaroks"
LABEL mysql.version="5.7.34"
LABEL mysql.edition="community edition"
LABEL mysql.archive="https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.34-winx64.zip"
VOLUME c:\app\data
VOLUME c:\app\ini.d
ENTRYPOINT ["c:\windows\system32\cmd.exe"]
#ENTRYPOINT ["c:\app\bin\mysqld.exe"]

但实际起来之后,发现 c:\app\datac:\app\ini.d 对应的数据卷都为空,甚至在宿主机下可以看到连目录修改时间都没变过。

经过各方搜索,发现有些人遇到一样的问题:Empty Folder after "docker run -v"Why is my volume empty?

而且 MSDN 上直接就没说任何相关内容,我暂且认为这方面与 LCOL 一致。目前已经联系微软售后了,等有一个确定的回复后在此处更新。


此现象为设计目的,并非缺陷,如果您有此类需求,建议您使用 Docker Desktop

得到这个回复后,我也不和微软多BB了,公司要用 WCOW 上的 MySQL 容器的项目我会继续为他们维护镜像,我自己不会再考虑使用 WCOW 了。

作者
ragnaroks
发布时间
2021-09-07
创作协议