Dockerfile VOLUME指令创建哪种类型的卷?

时间:2019-08-29 05:59:15

标签: docker dockerfile

Docker使用更新的—-mount参数创建卷。在此,键=值对指定音量选项。我对参数type特别感兴趣。

  • 绑定
  • 音量
  • tmpfs

使用时,哪种类型由Docker创建(以及如何指定此类型?)

Dockerfile

VOLUME /etc/nginx

我希望看到docker volume ls / etc / nginx

然后,我可以使用带有—-from-volume的另一个容器来访问它。我想念什么?

文档仅说明在启动容器时必须指定安装点。

  

主机目录在容器运行时声明:主机目录(挂载点)从本质上说是依赖于主机的。这是为了保留图像的可移植性,因为不能保证给定的主机目录在所有主机上都可用。因此,您无法从Dockerfile中挂载主机目录。 VOLUME指令不支持指定host-dir参数。创建或运行容器时,必须指定安装点。

这个问题可以改写为:如何将https://docs.docker.com/storage/volumes/与Dockerfile关联?

(我完全意识到让Docker守护程序管理器具有卷而不是使用绑定挂载的好处。这是我的意图)

1 个答案:

答案 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 enter image description here

注意:“匿名卷在首次安装到容器中时没有给出明确的名称,因此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