在预构建的docker容器中更改用户的uid(jenkins)

时间:2015-08-24 14:16:49

标签: jenkins docker jenkins-docker

我是docker的新手,所以如果这是一个我不知道的相当明显的过程,我会为前面的愚蠢问题道歉。

我正在使用jenkins泊坞窗图像设置持续集成服务器。我做了一个docker pull jenkins,并创建了一个用户jenkins,允许我将容器中的/var/jenkins_home挂载到我的主机/var/jenkins_home(也归jenkins:jenkins所有。 1}}用户)。

问题是容器似乎用uid 102定义了jenkins用户,但是我的主机将jenkins用户设置为1002,所以当我运行它时,我得到:

docker run --name jenkins -u jenkins -p 8080 -v /var/jenkins_home:/var/jenkins_home jenkins
/usr/local/bin/jenkins.sh: line 25: /var/jenkins_home/copy_reference_file.log: Permission denied

我只是让主持人的jenkins用户的uid在/etc/passwd中为102,但是该sid已经使用了该uid。我认为解决方案是将容器更改为使用uid 1002,但我不确定如何。

修改

实际上,主机上的用户102是messagebus,而不是sshd。

1 个答案:

答案 0 :(得分:2)

请查看刚刚上传的docker文件: https://github.com/bdruemen/jenkins-docker-uid-from-volume/blob/master/Dockerfile。 这里使用

从已装入的卷(主机目录)中提取UID
stat -c '%u' <VOLUME-PATH>

然后使用

将容器用户的UID更改为相同的值
usermod -u <UID>

这必须以root用户身份完成,但随后会删除root权限

gosu <USERNAME> <COMMAND>

所有内容都在ENTRYPOINT中完成,因此在您运行

之前,真正的UID是未知的
docker run -d -v <HOST-DIRECTORY>:<VOLUME-PATH> ...

请注意,更改UID后,容器中的进程可能无法再访问其他一些文件,因此您可能需要

chown -R <USERNAME> <SOME-PATH>
在gosu命令之前

您也可以更改GID,请在此处查看我的答案 Jenkins in docker with access to host docker 也许你想改变它们以提高安全性。