docker挂装的文件分区权限
Docker支持把主机的volume挂装到容器里,本文简单讲解用法。我们可以现在host上面创建一个目录:
$ mkdir /tmp/foofoo
然后运行容器,把这个目录挂装到容器里:
$ docker run -v /tmp/foofoo/:/data -it alpine sh
上面的命令含义如下:
run
命令启动一个基于alpine linux这个image的容器。-it sh
选项让启动后的容器进入交互模式并启动sh
这个shell。-v /tmp/foo:/data
把host的/tmp/foo/
目录挂装到容器的/data
目录。
此时我们可以查看容器里的目录:
如上图所示,可以看到data
这个目录。
可以往目录里面添加文件试试看:
此时我们在container的/data
目录里添加了foo.txt
。因为这个目录是映射的host的/tmp/foofoo
目录,所以我们在host里面看看这个文件:
可以看到文件实际上是添加到了host的/tmp/foofoo
里面。以上是docker的目录映射的一个基本使用方法。在使用的过程中,要注意目录权限的问题:
- 启动容器的时候,容器本身是以host上面,启动容器的用户的权限运行的。
比如我在我的电脑上的当前用户如下:
$ whoami
weli
$
那么我以这个用户执行docker命令,启动容器,容器都是以我这个用户的权限在运行的,所以超出这个用户权限的操作都是做不了的。比如我现在在host上面,刚刚创建的/tmp/foofoo
,是属于weli
这个用户的:
$ ls -ld /tmp/foofoo
drwxr-xr-x 3 weli wheel 96 Apr 7 08:02 /tmp/foofoo
因此,映射到容器里,可以对这个目录里的数据进行操作。但是如果我把上面这个host的目录权限改一下,改成root
拥有:
$ sudo chown root /tmp/foofoo/
Password:
$ ls -ld /tmp/foofoo
drwxr-xr-x 3 root wheel 96 Apr 7 08:02 /tmp/foofoo
此时,我们回到容器里,试着再往映射的/data
目录里添加数据:
此时可以看见我们在容器里不再有权限来往/data
里添加文件。虽然我们的容器里面是在用root
身份来操作,但是要明白,容器是按照host上面,执行docker的用户权限在运行的。所以容器内部的root
账号是不会超越host所赋予的权限的。