@maorongrong
2016-10-25T12:52:11.000000Z
字数 1340
阅读 747
docker
date: 2016-10-25
摘要: 就是想搞明白,通过-v挂载与删除容器逻辑卷。
命令docker run -v /container/dir随机挂载
Docker会在主机上创建一个目录,默认情况下是在/var/lib/docker下,然后将其挂载到指定的容器路径(/container/dir),当删除使用该Volume的容器时,Volume本身不会受到影响,可以一直保存下去。(NOTE:要彻底删除随机在宿主机创建的目录一定要docker rm -v)。
我们在主机上对/var/lib/docker目录的操作会同步到挂载该目录的容器中。
由命令docker run -v /host/dir:/container/dir指定挂载
由用户直接指定将宿主机目录/host/dir挂载到指定的容器目录/container/dir,NOTE:无论这个/host/dir处于哪个根目录下,其目录权限都是和/container/dir权限保持一致。
NOTE:一般镜像在创建时使用其root用户,所以直接docker run后挂在的/container/dir目录UID:GID都是root的。即使挂载的宿主机上amy用户(sudo权限)家目录下的路径并由amy创建的容器,该家目录下的/host/dir依旧时root:root权限,amy只有只读权限。
解决方法:在创建的容器内,由root将/container/dir目录权限更改为你宿主即amy用户的UID:GID:
amy@amy-HP:~$ sudo cat /etc/passwd | grep amy[sudo] amy 的密码:amy:x:1000:1000:amy,,,:/home/amy:/bin/bash
容器内更改权限:
root@0c74a13e77c9:/# chown 1000:1000 /container/dir
查看宿主机已存在目录:
amy@amy-HP:~$ ll -d vtestdrwxrwxr-x 2 amy amy 4096 10月 25 20:36 vtest/amy@amy-HP:~$ sudo cat /etc/passwd | grep amyamy:x:1000:1000:amy,,,:/home/amy:/bin/bash
创建容器并查看容器内挂载目录权限:
amy@amy-HP:~$ docker run -ti -v `pwd`/vtest:/test -P java:latestroot@1b857a445b51:/# ll var/bash: ll: command not foundroot@1b857a445b51:/# ls -ld test/drwxrwxr-x 2 1000 1000 4096 Oct 25 12:36 test/
可见,挂载不存在的主机目录到容器后,最好先将容器对应目录权限改为host用户的UID:GID;
若主机目录已存在,则不需要。
对于挂载指定目录不存、和挂载已存在目录启动的容器,最终删除容器docker rm -v也不会删除主机中新建或者已存在的目录。所以,docker rm不加-v参数也可以的。
