将本地目录挂载到不作为VOLUME公开的Docker容器path中

有什么区别:

  1. 将主机目录挂载到容器path中(path不作为卷展示),例如:

docker run -v /host/directory:/container/directory my_image command_to_run

Dockerfilemy_image 包含VOLUME ["/container/directory"]

  1. 将主机目录挂载到作为卷显示的容器path中:

docker run -v /host/directory:/container/directory my_image command_to_run

Dockerfilemy_image 包含 VOLUME ["/container/directory"]

我知道卷数据依然独立于容器的生命周期。 但是,因为我想从容器内部处理本地数据,所以如果容器内的安装点是一个容量,这是否有所帮助?

如果将主机的path安装到容器中,则没有区别。 来自主机的文件系统将被安装在容器内的该目录的顶部。

列出卷并将其列在图像中之间的区别是docker在创build图像时没有指定卷的行为。 当在图像上定义音量时,docker工人将创build一个“匿名”音量,您可以使用docker volume ls视为长uuidstring。 这些卷很less有用,所以我build议不要在图像中定义卷,而只是在docker-compose.yml docker run命令或docker-compose.yml定义中定义它们。

在图像中定义音量的缺点包括:

  1. Dockerfile或后代Dockerfile中后面的行可能无法更改此位置的内容。 Docker对此的行为因场景和版本而异,因此为了可预测性,一旦在映像中定义了卷,我认为该目录不受限制。

  2. 创build匿名卷很难使用,可能会混乱文件系统。

如果你对更多的细节感兴趣,我早就发布了关于这个话题的博客 。