【问题标题】:How to launch container with user namespace configuration?如何使用用户命名空间配置启动容器?
【发布时间】:2020-06-02 02:12:20
【问题描述】:

在下面的 docker 文件中,基础映像 (jenkins/jenkins) 在容器内为用户 jenkins 提供 UID 1000 和 GID 1000

FROM jenkins/jenkins

# Install some base packages

# Use non-privileged user provided by base image
USER jenkins # with uid 1000 and GID 1000

# Copy plugins and other stuff

在 docker 主机(EC2 实例)上,我们也创建了类似的 UID 和 GID,

 $ groupadd -g 1000 jenkins
 $ useradd -u 1000 -g jenkins jenkins
 $ mkdir -p /abc/home_folder_for_jenkins
 $ chown -R jenkins:jenkins /abc/home_folder_for_jenkins

为了确保容器可以将文件写入 EC2 实例中的/abc/home_folder_for_jenkins


在同一个 EC2 实例中我们需要注意的另一个方面是运行容器(上述容器除外)以非特权模式运行。

所以,下面的配置是在 docker host(EC2) 上进行的:

$ echo dockremap:165536:65536 > /etc/subuid
$ echo dockremap:165536:65536 > /etc/subgid
$ echo '{"debug":true, "userns-remap":"default"}' > /etc/docker/daemon.json

这个 dockerremap 配置不允许 jenkins 启动并且 docker 容器进入Exited 状态:

$ ls -l /abc/home_folder_for_jenkins
total 0

删除 docker remap 配置后,一切正常。


为什么dockremap配置不允许jenkins容器以jenkins用户身份运行?

【问题讨论】:

  • 由于使用了 NS,主机上的 UID 1000 与运行容器中的 UID 1000 不同。尝试使用docker rundocker exec 在容器中打开一个shell,然后从容器内部运行chown 命令。然后您可以从主机系统再次检查所有权,您会看到所有者不是 1000。

标签: docker linux-kernel dockerfile amazon-ecs linux-namespaces


【解决方案1】:

用户命名空间偏移容器内用户的 UID/GID,以及容器内的任何文件。没有从容器内的 UID/GID 到外部主机 UID/GID 的映射(这会破坏目的)。因此,您需要偏移正在创建的目录的 UID/GID,或者只使用命名卷并让 docker 为您处理。我相信主机上的 UID/GID 将是 166536 (165536 + 1000)(我可能在其中有一个关闭,所以如果仍然失败,请尝试打开目录权限并查看创建了什么)。

【讨论】:

  • 让我在 subuid 和 subgid 中尝试 165536+1000
  • 我将 /etc/subuid & /etc/subgid 文件修改为 166536:65536 但没有运气
【解决方案2】:

我实际上正在与它作斗争,因为它似乎不是很便携,但这是我发现的最好的。如上所述,在您的 docker 主机上,UID/GID 是来自容器的那些 + /etc/subuid/etc/subgid 中的值。 因此,您的主机上的“容器根目录”是 165536,而您的用户 jenkins 是 166536 (165536 + 1000)。

回到你的例子,你需要做的是

$ mkdir -p /abc/home_folder_for_jenkins
$ chown -R 166536:166536 /abc/home_folder_for_jenkins

【讨论】:

  • 不,它不工作......詹金斯容器无法写入/abc/home_folder_for_jenkins
  • Jenkins 进程的所有者是什么来自主机? (类似于ps aux | grep -i jenkins
  • Jenkins 容器在几秒钟内进入Exited 状态。所以,我不能ps aux。删除用户命名空间配置后,一切正常。
猜你喜欢
  • 2019-12-25
  • 2012-01-08
  • 2018-02-04
  • 1970-01-01
  • 1970-01-01
  • 2012-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多