卷连接现有的已填充主机和容器目录时会发生什么情况

我搜查了文档,但没有出现。 我知道我可以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被使用。