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

Docker 当卷链接现有已填充的主机和容器目录时会发生什么情况,docker,dockerfile,volumes,Docker,Dockerfile,Volumes,我已经搜索了文档,但是没有找到任何东西,所以我需要测试一下。但为了便于将来参考 主机文件夹是否已填充容器文件夹内容 相反吗 两个文件夹内容是否合并?(在这种情况下:当两个文件夹中都有同名文件时会发生什么情况?) 还是会产生错误?该错误是在启动时引发的,还是在您尝试使用指向容器上现有已填充文件夹的卷构建映像时引发的 另外,文档中没有的另一件事:我是否必须将容器路径定义为Docker文件中的卷,以便在启动容器时对其使用-v,或者我是否可以动态创建卷?每当在主机上安装卷时创建Docker容器,例如:

我已经搜索了文档,但是没有找到任何东西,所以我需要测试一下。但为了便于将来参考

主机文件夹是否已填充容器文件夹内容

相反吗

两个文件夹内容是否合并?(在这种情况下:当两个文件夹中都有同名文件时会发生什么情况?)

还是会产生错误?该错误是在启动时引发的,还是在您尝试使用指向容器上现有已填充文件夹的卷构建映像时引发的


另外,文档中没有的另一件事:我是否必须将容器路径定义为Docker文件中的卷,以便在启动容器时对其使用-v,或者我是否可以动态创建卷?

每当在主机上安装卷时创建Docker容器,例如:

docker run -v /path/on/host:/data container-image
由于映像生成过程而存在于
/data
中的任何内容都将被完全丢弃,并且当前位于
/path/on/host
的内容将被替换。(如果
/path/on/host
不存在,它将被创建为一个空目录,尽管我认为该行为的某些方面目前可能会被弃用。)


不需要在Dockerfile中使用
预先定义卷;所有
VOLUME
都会导致从映像运行的任何容器具有隐式
-v/VOLUME/path
(注意缺少主机装载路径)参数添加到其
docker run
命令中,如果使用显式
-v/host/path:/volume/path
,该参数将被忽略。

当您运行容器并从主机装载卷时,容器中看到的只是主机上的内容-卷装载点位于主机目录,因此,如果映像中的目录中有任何内容,就会绕过它

使用此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
不,您不需要
指令。没有它,行为是一样的