阿男的小窝

View the Project on GitHub

docker挂装的文件分区权限

Docker支持把主机的volume挂装到容器里,本文简单讲解用法。我们可以现在host上面创建一个目录:

$ mkdir /tmp/foofoo

然后运行容器,把这个目录挂装到容器里:

$ docker run -v /tmp/foofoo/:/data -it alpine sh

上面的命令含义如下:

此时我们可以查看容器里的目录:

如上图所示,可以看到data这个目录。

可以往目录里面添加文件试试看:

此时我们在container的/data目录里添加了foo.txt。因为这个目录是映射的host的/tmp/foofoo目录,所以我们在host里面看看这个文件:

可以看到文件实际上是添加到了host的/tmp/foofoo里面。以上是docker的目录映射的一个基本使用方法。在使用的过程中,要注意目录权限的问题:

比如我在我的电脑上的当前用户如下:

$ 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所赋予的权限的。