将本地目录挂载到不作为VOLUME公开的Docker容器path中
有什么区别:
- 将主机目录挂载到容器path中(path不作为卷展示),例如:
docker run -v /host/directory:/container/directory my_image command_to_run
Dockerfile
的my_image
不包含VOLUME ["/container/directory"]
- 将主机目录挂载到作为卷显示的容器path中:
docker run -v /host/directory:/container/directory my_image command_to_run
Dockerfile
的my_image
包含 VOLUME ["/container/directory"]
我知道卷数据依然独立于容器的生命周期。 但是,因为我想从容器内部处理本地数据,所以如果容器内的安装点是一个容量,这是否有所帮助?
如果将主机的path安装到容器中,则没有区别。 来自主机的文件系统将被安装在容器内的该目录的顶部。
列出卷并将其列在图像中之间的区别是docker在创build图像时没有指定卷的行为。 当在图像上定义音量时,docker工人将创build一个“匿名”音量,您可以使用docker volume ls
视为长uuidstring。 这些卷很less有用,所以我build议不要在图像中定义卷,而只是在docker-compose.yml
docker run
命令或docker-compose.yml
定义中定义它们。
在图像中定义音量的缺点包括:
-
Dockerfile或后代Dockerfile中后面的行可能无法更改此位置的内容。 Docker对此的行为因场景和版本而异,因此为了可预测性,一旦在映像中定义了卷,我认为该目录不受限制。
-
创build匿名卷很难使用,可能会混乱文件系统。
如果你对更多的细节感兴趣,我早就发布了关于这个话题的博客 。