Docker 用户重新映射权限问题

标签 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 守护进程以所需的用户重新映射选项启动?

最佳答案

我已经完成了这个,我的 /etc/docker/daemon.json 看起来像这样:

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

注意 userns-remap "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 版本是 Docker version 18.09.2, build 6247962 on Ubuntu 16。

关于Docker 用户重新映射权限问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51179939/

相关文章:

linux - 将最后一行 Docker 日志尾部存储到 shell 变量

docker - Kubernetes:无法 curl minikube pod

amazon-web-services - 用于本地开发的 AWS Docker 容器

docker - 在 docker 容器上访问服务器时出现问题

php - 检索当前目录时出错 : getcwd in Docker container

Docker如何获取容器使用的卷

python - 如何恢复运行在 docker 容器中的 errbot 的 backup.py 插件数据

docker - Mac版Docker和mkdir权限

reactjs - .next 文件夹在生产模式下在 CentOS 上使用 Docker 缺少一些文件

angular - Docker “Failed to exec e2e script”