【发布时间】: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 run或docker exec在容器中打开一个shell,然后从容器内部运行chown命令。然后您可以从主机系统再次检查所有权,您会看到所有者不是 1000。
标签: docker linux-kernel dockerfile amazon-ecs linux-namespaces