tre*_*der 22 docker dockerfile
我们来举个例子吧.
以下是VOLUME该指令nginx的图像:
VOLUME ["/etc/nginx/sites-enabled", "/etc/nginx/certs", "/etc/nginx/conf.d", "/var/log/nginx", "/var/www/html"]
Run Code Online (Sandbox Code Playgroud)
这是我的问题:
当您启动容器时,这些目录是否会显示在我的主机上?当我停止我的容器时,目录将保留?
如果我的主机中已存在某些(或所有)这些目录,会发生什么?例如,假设图像/etc/nginx在容器目录中附带了一个默认配置文件/etc/nginx,我的主机上也有一个配置文件.当容器启动时,哪些文件将获得优先权?
-v /host/dir:container/dir和之间的关键区别是VOLUME什么?
参考文献:
Adr*_*uat 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 }]
Run Code Online (Sandbox Code Playgroud)
我们可以看到Docker已经为该卷创建了一个目录/var/lib/docker/volumes/0d7adb21591798357ac1e140735150192903daf3de775105c18149552a26f951/_data.
您可以从主机中自由修改/添加/删除此目录中的文件,但请注意,您可能需要使用sudo权限.
Docker只会在两种情况下删除卷目录:
--rm给出该选项,则docker run在容器退出时将删除任何卷docker rm -v CONTAINER,则将删除任何卷.在这两种情况下,只有在没有其他容器引用它们时才会删除卷.-v HOST_DIR:CON_DIRDocker永远不会删除映射到特定主机目录的卷(语法).但是,如果删除卷的容器,则命名方案意味着您将很难确定哪个目录包含该卷.
那么,具体问题:
VOLUME指令与-v未指定主机目录相同.指定主机目录时,Docker不会为卷创建任何目录,也不会从映像复制文件,也不会删除卷(docker rm -v CONTAINER不会删除映射到用户指定主机目录的卷).更多信息:
http://container-solutions.com/2014/12/understanding-volumes-docker/
| 归档时间: |
|
| 查看次数: |
7897 次 |
| 最近记录: |