之间有什么区别:
docker run -v /host/directory:/container/directory my_image command_to_run
Dockerfile
的 my_image
VOLUME ["/container/directory"]
docker run -v /host/directory:/container/directory my_image command_to_run
Dockerfile
的 my_image
包括
VOLUME ["/container/directory"]
我知道体积数据与容器生命周期无关。但是,由于我想从容器中处理我的本地数据,如果容器内的挂载点是卷,这会有什么不同吗?
答案 0 :(得分:1)
如果将路径从主机安装到容器中,则没有区别。来自主机的文件系统将安装在容器内该目录的顶部。
列出卷并且未在图像中列出它之间的区别在于在未指定卷的情况下创建图像时docker的行为。当在图像上定义卷时,docker将创建一个“匿名”卷,您可以使用docker volume ls
作为长uuid字符串。这些卷很少有用,因此我建议不要在图像中定义卷,而只是在docker run
命令或docker-compose.yml
定义中定义它们。
在图像中定义卷的缺点包括:
Dockerfile或后代Dockerfile中的后续行可能无法更改此位置的内容。 Docker的行为因场景和版本而异,因此为了预测性,一旦在图像中定义了卷,我认为该目录不受限制。
创建匿名卷很难使用,并且可能会混乱文件系统。
如果您对更多细节感兴趣,我前一段时间就此主题发布了blog。