Dockerfile 中的 VOLUME 指令是否创建卷或仅指定挂载点?

Dockerfile 中的 VOLUME 指令是否创建卷或仅指定挂载点?

https://docs.docker.com/reference/dockerfile/#volume需要努力。

“VOLUME 指令创建具有指定名称的挂载点,并将其标记为保存来自本机主机或其他容器的外部挂载卷。”

当你有

VOLUME ["/etc/blue", "/var/cache/blah", "/var/lib/bar", "/var/log"]

在你的 Dockerfile 中。我们知道我们可以使用‘docker 卷创建 foo’但没有迹象表明这是否是预期的结果。

答案1

指令VOLUME

  • 在构建时创建一个匿名卷,这样放入卷挂载点的任何文件都不会包含在生成的映像中。构建完成后,将删除此卷。

  • 在运行时创建一个匿名卷,该卷将在容器被删除时被删除,除非某些东西(卷或者绑定挂载)明确地挂载在该挂载点上。

例如,如果我们有:

FROM docker.io/alpine:latest
VOLUME /data
COPY <<EOF /data/testfile.txt
This is a test
EOF

然后:

  • 我们会发现图像中不包含/data/testfile.txt

  • 如果我们启动一个没有明确挂载的容器,如下所示:

    docker run -it --rm testimage
    

    当容器运行时我们将看到:

    $ docker volume ls
    DRIVER    VOLUME NAME
    local     952012ac54d9b9f7091f756940b4a5a60fa276e8fbce7a8892fc316272421613
    

    但当容器存在时,卷将被删除。

  • 如果我们在卷挂载点上明确挂载一个卷:

    docker run -it --rm -v myvolume:/data testimage
    

    然后就不会创建匿名卷:

    $ docker volume ls
    DRIVER    VOLUME NAME
    local     myvolume
    

    并且当容器退出时体积会被保留。

相关内容