Rootless docker run -u $CURRENT_USER 但是安装仍然以 root 身份安装

问题描述 投票:0回答:1

我正在尝试设置 Jenkins 实例以无根运行 docker 容器。

当 jenkins 启动容器时,

-u
is 标志与 jenkins 运行器的 id 一起传递。

跑步者被命名为“runner”并且具有UID3217,因此Jenkins执行:

docker run -u 3217:100 -v /opt/build/agent/job/:/opt/build/agent/job:rw,z image

jenkins 从容器内部做的第一件事:

touch /opt/build/agent/job/jenkins.log
但是这会导致提示
Permission denied

当我猛击容器并运行时

id

uid=3217 gid=100(用户) 组=100(用户)

被返回(这是预期的)。此外,当我运行

ls -la /opt/build/agent/job
时,所有文件和目录都归 root 所有:

这与我退出容器并作为

runner
用户针对安装点运行
ls -la
形成鲜明对比,其中每个文件都归
runner:users
所有,因此可以轻松地从外部进行操作容器,由同一用户使用。

我无法消除 Jenkins 的

-u
论点,而且我不知道如何缓解这个问题。

docker 有没有办法挂载与

-u
参数指定的相同权限的目录?

docker jenkins mounted-volumes rootless
1个回答
0
投票

docker 有没有办法挂载与 -u 参数指定的权限相同的目录?

不。 Docker 不会更改任何权限。

该目录具有它所拥有的权限。如果该目录不存在,它将由以root身份运行的dockerd进程创建,因此该目录将归root所有。

如果您希望目录具有不同的权限,请自行创建目录,或者

chmod
它。

如果你不想让目录自动创建为root,你可以使用

--mount type=bind,source=/opt/build/agent/job/,target=/opt/build/agent/job,bind-propagation=shared,rw
,但那时我对selinux一无所知。

© www.soinside.com 2019 - 2024. All rights reserved.