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
并且当容器退出时体积会被保留。