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

What happens when a volume links an existing populated host and container dir

我已经搜索了文档,但没有任何结果,所以有时间测试它。但为了将来快速参考...

宿主文件夹是否填充了容器文件夹内容?

是否相反?

两个文件夹的内容是否合并? (那样的话:当两个文件夹中有同名文件时会发生什么情况?)

或者它会产生错误吗?错误是在启动时抛出还是在您尝试构建一个 VOLUME 指向容器上现有填充文件夹的图像时抛出?

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

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

docker run -v /path/on/host:/data container-image

由于图像构建过程,已经在 /data 中的任何内容总是被完全丢弃,并且在其位置使用当前在 /path/on/host 中的任何内容。 (如果 /path/on/host 不存在,它会被创建为一个空目录,但我认为该行为的某些方面目前可能已被弃用。)

不需要在 Docker 文件中使用 VOLUME 预定义卷;所有 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

不,您不需要 VOLUME 指令。没有它,行为是一样的。