作者:爱的甜蜜日记2010 | 来源:互联网 | 2023-05-22 06:56
我们来举个例子吧.
以下是VOLUME
该指令nginx
的图像:
VOLUME ["/etc/nginx/sites-enabled", "/etc/nginx/certs", "/etc/nginx/conf.d", "/var/log/nginx", "/var/www/html"]
这是我的问题:
当您启动容器时,这些目录是否会显示在我的主机上?当我停止我的容器时,目录将保留?
如果我的主机中已存在某些(或所有)这些目录,会发生什么?例如,假设图像/etc/nginx
在容器目录中附带了一个默认配置文件/etc/nginx
,我的主机上也有一个配置文件.当容器启动时,哪些文件将获得优先权?
-v /host/dir:container/dir
和之间的关键区别是VOLUME
什么?
参考文献:
https://github.com/dockerfile/nginx/blob/master/Dockerfile
http://www.tech-d.net/2014/11/03/docker-indepth-volumes/
如何在构建期间将主机卷装入Dockerfile中的docker容器中
http://jpetazzo.github.io/2015/01/19/dockerfile-and-data-in-volumes/
Adrian Mouat..
22
容器的卷只是主机上的目录,无论它们是由哪种方法创建的.如果您未在主机上指定目录,Docker将为该卷创建一个新目录,通常位于该目录下/var/lib/docker/vfs
.
但是创建了卷,通过使用docker inspect
命令可以很容易地找到它在主机上的位置,例如:
$ ID=$(docker run -d -v /data debian echo "Data container")
$ docker inspect -f {{.Mounts}} $ID
[{0d7adb21591798357ac1e140735150192903daf3de775105c18149552a26f951 /var/lib/docker/volumes/0d7adb21591798357ac1e140735150192903daf3de775105c18149552a26f951/_data /data local true }]
我们可以看到Docker已经为该卷创建了一个目录/var/lib/docker/volumes/0d7adb21591798357ac1e140735150192903daf3de775105c18149552a26f951/_data
.
您可以从主机中自由修改/添加/删除此目录中的文件,但请注意,您可能需要使用sudo
权限.
Docker只会在两种情况下删除卷目录:
如果--rm
给出该选项,则docker run
在容器退出时将删除任何卷
如果删除了容器docker rm -v CONTAINER
,则将删除任何卷.
在这两种情况下,只有在没有其他容器引用它们时才会删除卷.-v HOST_DIR:CON_DIR
Docker永远不会删除映射到特定主机目录的卷(语法).但是,如果删除卷的容器,则命名方案意味着您将很难确定哪个目录包含该卷.
那么,具体问题:
是的,是的,有上述警告.
每个Docker托管卷都在主机上获取一个新目录
该VOLUME
指令与-v
未指定主机目录相同.指定主机目录时,Docker不会为卷创建任何目录,也不会从映像复制文件,也不会删除卷(docker rm -v CONTAINER
不会删除映射到用户指定主机目录的卷).
更多信息:
http://container-solutions.com/2014/12/understanding-volumes-docker/
1> Adrian Mouat..:
容器的卷只是主机上的目录,无论它们是由哪种方法创建的.如果您未在主机上指定目录,Docker将为该卷创建一个新目录,通常位于该目录下/var/lib/docker/vfs
.
但是创建了卷,通过使用docker inspect
命令可以很容易地找到它在主机上的位置,例如:
$ ID=$(docker run -d -v /data debian echo "Data container")
$ docker inspect -f {{.Mounts}} $ID
[{0d7adb21591798357ac1e140735150192903daf3de775105c18149552a26f951 /var/lib/docker/volumes/0d7adb21591798357ac1e140735150192903daf3de775105c18149552a26f951/_data /data local true }]
我们可以看到Docker已经为该卷创建了一个目录/var/lib/docker/volumes/0d7adb21591798357ac1e140735150192903daf3de775105c18149552a26f951/_data
.
您可以从主机中自由修改/添加/删除此目录中的文件,但请注意,您可能需要使用sudo
权限.
Docker只会在两种情况下删除卷目录:
如果--rm
给出该选项,则docker run
在容器退出时将删除任何卷
如果删除了容器docker rm -v CONTAINER
,则将删除任何卷.
在这两种情况下,只有在没有其他容器引用它们时才会删除卷.-v HOST_DIR:CON_DIR
Docker永远不会删除映射到特定主机目录的卷(语法).但是,如果删除卷的容器,则命名方案意味着您将很难确定哪个目录包含该卷.
那么,具体问题:
是的,是的,有上述警告.
每个Docker托管卷都在主机上获取一个新目录
该VOLUME
指令与-v
未指定主机目录相同.指定主机目录时,Docker不会为卷创建任何目录,也不会从映像复制文件,也不会删除卷(docker rm -v CONTAINER
不会删除映射到用户指定主机目录的卷).
更多信息:
http://container-solutions.com/2014/12/understanding-volumes-docker/