Docker使用更新的—-mount
参数创建卷。在此,键=值对指定音量选项。我对参数type
特别感兴趣。
使用时,哪种类型由Docker创建(以及如何指定此类型?)
Dockerfile
VOLUME /etc/nginx
我希望看到docker volume ls
/ etc / nginx
然后,我可以使用带有—-from-volume
的另一个容器来访问它。我想念什么?
文档仅说明在启动容器时必须指定安装点。
主机目录在容器运行时声明:主机目录(挂载点)从本质上说是依赖于主机的。这是为了保留图像的可移植性,因为不能保证给定的主机目录在所有主机上都可用。因此,您无法从Dockerfile中挂载主机目录。 VOLUME指令不支持指定host-dir参数。创建或运行容器时,必须指定安装点。
这个问题可以改写为:如何将https://docs.docker.com/storage/volumes/与Dockerfile关联?
(我完全意识到让Docker守护程序管理器具有卷而不是使用绑定挂载的好处。这是我的意图)
答案 0 :(得分:2)
VOLUME
中的Dockerfile
指令创建一个匿名卷,该匿名卷绑定安装在容器中。有关其他信息,请参考。 storage文档:“除了名称,命名卷和匿名卷的行为也相同”。示例:
FROM ubuntu:18.04
VOLUME ["/src"]
RUN mkdir /src && \
touch /src/file.txt
构建映像:docker build --rm -t so:57703848 .
并运行容器:docker run --rm --name mycontainer -it --entrypoint cat -d so:57703848
(设置cat
以使容器在后台运行仅出于示例目的)。
现在,您可以使用--volumes-from
将卷从mycontainer
绑定到另一个容器:docker run --rm -it --volumes-from mycontainer ubuntu:18.04
注意:“匿名卷在首次安装到容器中时没有给出明确的名称,因此Docker为它们提供了一个随机名称,该名称在给定的Docker主机中保证是唯一的。” -docker volume ls
可能会出现,即:ccb199ae1396c2b9d49acc58559c739bd40b2ef37af50191fa3600ab6552fb20
(随机生成)。您可以将命名卷装入run
中的匿名卷,即docker run --rm --name mycontainer -v myvolume:/src -it --entrypoint cat -d so:57703848
,--volumes-from
的工作方式相同,而docker volume ls
的输出方式为myvolume
。