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\data
和 c:\app\ini.d
对应的数据卷都为空,甚至在宿主机下可以看到连目录修改时间都没变过。
经过各方搜索,发现有些人遇到一样的问题:Empty Folder after "docker run -v"、Why is my volume empty?。
而且 MSDN 上直接就没说任何相关内容,我暂且认为这方面与 LCOL 一致。目前已经联系微软售后了,等有一个确定的回复后在此处更新。
此现象为设计目的,并非缺陷,如果您有此类需求,建议您使用 Docker Desktop
得到这个回复后,我也不和微软多BB了,公司要用 WCOW 上的 MySQL 容器的项目我会继续为他们维护镜像,我自己不会再考虑使用 WCOW 了。