我已经搜索了文档,但没有找到任何内容,所以现在是时候测试一下了。但是为了快速参考...
主机文件夹是否由容器文件夹内容生成?
还是相反?
两个文件夹的内容是否合并? (在这种情况下:当两个文件夹中有相同名称的文件时会发生什么?)
或者会产生错误吗?错误是在启动时抛出还是在尝试使用指向容器上现有填充文件夹的VOLUME构建镜像时抛出?
另外,文档中没有提到的另一件事:我是否必须在Dockerfile中将容器路径定义为VOLUME才能在启动容器时使用-v对其进行挂载,还是可以即时创建卷?
我已经搜索了文档,但没有找到任何内容,所以现在是时候测试一下了。但是为了快速参考...
主机文件夹是否由容器文件夹内容生成?
还是相反?
两个文件夹的内容是否合并? (在这种情况下:当两个文件夹中有相同名称的文件时会发生什么?)
或者会产生错误吗?错误是在启动时抛出还是在尝试使用指向容器上现有填充文件夹的VOLUME构建镜像时抛出?
另外,文档中没有提到的另一件事:我是否必须在Dockerfile中将容器路径定义为VOLUME才能在启动容器时使用-v对其进行挂载,还是可以即时创建卷?
使用此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
指令。没有它的情况下行为是相同的。
docker run -v /path/on/host:/data container-image
/data
中的任何内容都将被完全丢弃,而当前位于 /path/on/host
的任何内容都将被代替。(如果 /path/on/host
不存在,则会创建为空目录,尽管我认为这种行为的某些方面可能已经被弃用。)VOLUME
不是必需的;所有 VOLUME
所做的只是导致从镜像运行的任何容器都有一个隐式的 -v /volume/path
(注意缺少主机挂载路径)参数添加到其 docker run
命令中,如果使用显式的 -v /host/path:/volume/path
,则会忽略该参数。