Docker用户重映射权限问题

时间:2018-07-04 19:35:03

标签: docker

我正在尝试在Ubuntu 16.04主机上运行docker守护进程,以使docker容器中的进程不再以root的身份运行。

我对/etc/docker/daemon.json进行了如下更改

{
  "experimental": true,
  "bip": "192.19.77.1/24",
  "storage-driver": "overlay2",
  "graph": "/opt/docker",
  "userns-remap": "default"
}

(请注意,我根据客户的要求将graph的位置指定为/opt/docker。)

Docker似乎添加了以下条目:

cat /etc/subuid
me:100000:65536
dockremap:165536:65536

cat /etc/subgid
me:100000:65536
dockremap:165536:65536

此后,如果尝试使用sudo dockerd运行守护程序,则会得到以下信息:

# sudo dockerd
WARN[0000] The "graph" config file option is deprecated. Please use "data-root" instead.
WARN[0000] Running experimental build
INFO[2018-07-04T12:31:43.430653152-07:00] User namespaces: ID ranges will be mapped to subuid/subgid ranges of: dockremap:dockremap
a subdirectory in your graphroot path (/opt/docker/165536.165536) restricts access to the remapped root uid/gid; please fix by allowing 'o+x' permissions on existing directories

经过chownchmod的大量修改后,/opt/docker目录看起来像这样:

# ls -al
total 60
drwx--x--x 15 dockremap dockremap 4096 Jul  4 11:42 .
drwxr-s---  4 mjb       mjb       4096 Jul  4 11:32 ..
drwxrwxrwx  2    165536    165536 4096 Jul  4 11:38 165536.165536
drwx--S---  2 dockremap dockremap 4096 Jun  8 13:16 builder
drwx--s--x  3 dockremap dockremap 4096 Jun  8 13:16 containerd
drwx--S---  2 dockremap dockremap 4096 Jul  4 11:40 containers
drwx--S---  3 dockremap dockremap 4096 Jun  8 13:16 image
drwxr-s---  3 dockremap dockremap 4096 Jun  8 13:16 network
drwx--S---  3 dockremap dockremap 4096 Jul  4 11:42 overlay2
drwx--S---  4 dockremap dockremap 4096 Jun  8 13:16 plugins
drwx------  2 dockremap dockremap 4096 Jul  4 11:42 runtimes
drwx--S---  2 dockremap dockremap 4096 Jun  8 13:16 swarm
drwx------  2 dockremap dockremap 4096 Jul  4 11:42 tmp
drwx--S---  2 dockremap dockremap 4096 Jun  8 13:16 trust
drwx--S---  2 dockremap dockremap 4096 Jun  8 13:16 volumes

通过在chownchmod进行了多次尝试,该错误仍然存​​在。

有很多类似的问题,但是没有一个问题为我提供了足够的见识,可以使它起作用。

我该怎么做才能使docker daemon启动所需的用户重映射选项?

1 个答案:

答案 0 :(得分:1)

我已经做到了,我的/etc/docker/daemon.json看起来像这样:

{
  "experimental": true,
  "bip": "192.19.77.1/24",
  "storage-driver": "overlay2",
  "graph": "/opt/docker",
  "userns-remap": "webapp:webgrp"
}

请注意userns重映射"webapp:webgrp"

我的linux用户命名空间文件如下:

cat /etc/subuid
me:100000:65536
webapp:500000:65536

cat /etc/subgid
me:100000:65536
webgrp:500000:65536

请注意,webapp:webgrp映射到用户和组命名空间文件中的500000:500000

/opt/docker文件夹(docker在其中进行魔术处理)如下所示:

drwx--x--x 3 root root 27 Jul 31 2018 docker

如果我们使用ls -al /opt/docker向下浏览该目录,则可以看到docker为自己创建了一个目录,如下所示:

drwx------ 15 500000 500000 200 Feb 14 21:21 500000.500000

另一个重要的事情是增加数量。如果我们希望将目录作为卷挂载到Docker容器,则需要执行以下操作:

chown -R 500000:500000 /the/dir/i/want/to/mount

在Docker容器内部,看起来像是'root:root'。然后,如果需要,docker容器可以chown,例如我的MongoDB容器chowns500999:500999的目录,该目录在容器内为999:999

我希望这对某人有帮助。

我的docker版本在Ubuntu 16上是Docker version 18.09.2, build 6247962