当卷链接现有的填充主机和容器目录时会发生什么
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
指令。没有它,行为是一样的。
我已经搜索了文档,但没有任何结果,所以有时间测试它。但为了将来快速参考...
宿主文件夹是否填充了容器文件夹内容?
是否相反?
两个文件夹的内容是否合并? (那样的话:当两个文件夹中有同名文件时会发生什么情况?)
或者它会产生错误吗?错误是在启动时抛出还是在您尝试构建一个 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
指令。没有它,行为是一样的。