@maorongrong
2016-10-25T12:52:11.000000Z
字数 1340
阅读 611
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 vtest
drwxrwxr-x 2 amy amy 4096 10月 25 20:36 vtest/
amy@amy-HP:~$ sudo cat /etc/passwd | grep amy
amy:x:1000:1000:amy,,,:/home/amy:/bin/bash
创建容器并查看容器内挂载目录权限:
amy@amy-HP:~$ docker run -ti -v `pwd`/vtest:/test -P java:latest
root@1b857a445b51:/# ll var/
bash: ll: command not found
root@1b857a445b51:/# ls -ld test/
drwxrwxr-x 2 1000 1000 4096 Oct 25 12:36 test/
可见,挂载不存在的主机目录到容器后,最好先将容器对应目录权限改为host用户的UID:GID
;
若主机目录已存在,则不需要。
对于挂载指定目录不存、和挂载已存在目录启动的容器,最终删除容器docker rm -v
也不会删除主机中新建或者已存在的目录。所以,docker rm
不加-v
参数也可以的。