如何在Dockerfile中声明命名卷?

Hil*_*kus 18 docker dockerfile

如果我VOLUME在docker文件中使用它,它会创建一个匿名卷.有没有办法从dockerfile创建命名卷?

我正在寻找相当于Dockerfile的

docker run -v my-named-volume:/mnt/something repo/my-img
Run Code Online (Sandbox Code Playgroud)

我通过Dockerfile设法获得的相当于

docker run -v /mnt/something repo/my-img
Run Code Online (Sandbox Code Playgroud)

我认为它不受支持; 然而,医生说这个

VOLUME指令创建具有指定名称的安装点,并将其标记为从本机主机或其他容器保存外部安装的卷.

这似乎意味着有一种方法可以命名音量,但它没有说明如何

小智 12

这个问题评论比文档更好地解释了当前的情况。

这是设计使然。让我尝试解释一下;Dockerfile 中的 VOLUME 指令仅定义应为映像中的特定路径(运行时为 /container)创建卷。卷的名称永远不应该由图像指定,因为那应该在运行时定义


joh*_*s85 9

这是不可能的.我认为文档措辞可能会误导.


ldg*_*ldg 6

有点不清楚.它使用该名称创建安装点,但实际文件路径不使用该名称.如果您这样做docker inspect {container-name},您将看到如下名称:"Destination": "/mnt/something",和实际位置,如:"Source": "/var/lib/docker/volumes/cb80c7802244dd3669eed8afb7d94b61366844d80677eb180fa12002db04ea7c/_data",.

这是因为Dockerfile没有绑定到特定主机,并且无法确定主机卷路径是否存在.您需要在run(或等效的)语句中执行此操作.docker inspect如果需要在脚本或类似文件中使用该信息,则可以使用api或在创建容器后找出卷的位置.

在Dockerfile中声明卷可确保数据保持不变并且可供主机使用 - 即使该位置未预设.