卷连接现有的已填充主机和容器目录时会发生什么情况
我搜查了文档,但没有出现。 我知道我可以testing它,但我感觉很懒,所以为了将来的参考和任何人谁想要显示他们的专业知识,赢得一些SO代表…
主机文件夹是否填充了容器文件夹内容?
这是相反的吗?
两个文件夹内容是否合并? (在这种情况下:当两个文件夹中有同名文件时会发生什么?)
还是会产生一个错误? 启动时引发的错误,还是当您尝试使用VOLUME指向容器上现有的已填充文件夹构build映像时,是否会引发错误?
此外,另一件不在文档中:我必须在Dockerfile中将容器path定义为VOLUME,以便在启动容器时对其使用-v,或者可以在运行时创build卷?
当您运行一个容器并从主机装入一个卷时,容器中看到的所有内容都是主机上的内容 – 主机目录上的卷装载点,因此如果映像中的目录有任何内容,它将被绕过。
从这个Dockerfile的图像:
FROM ubuntu WORKDIR /vol RUN touch /vol/from-container VOLUME /vol
当您在没有主机装载的情况下运行它时,图像内容将被复制到卷中:
> docker run vol-test ls /vol from-container
但是从主机挂载卷,您只能看到主机的内容:
> ls $(pwd)/host from-host > docker run -v $(pwd)/host:/vol vol-test ls /vol from-host
不,你不需要VOLUME
指令。 没有它的行为是一样的。
每当在主机上安装一个卷时创build一个Docker容器,例如:
docker run -v /path/on/host:/data container-image
由于图像构build过程已经在/data
任何内容总是被完全丢弃,并且当前在/path/on/host
任何内容都被使用。 (如果/path/on/host
不存在,它将被创build为一个空目录,尽pipe我认为该行为的某些方面可能会被废弃。)
用VOLUME
预先定义Dockerfile中的VOLUME
是不必要的。 所有VOLUME
都会导致从镜像运行的任何容器都有隐式的-v /volume/path
(注意缺less主机装入path)参数添加到它们的docker run
命令中,如果显式的-v /host/path:/volume/path
被使用。