我是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。
答案 0 :(得分:2)
请查看刚刚上传的docker文件: https://github.com/bdruemen/jenkins-docker-uid-from-volume/blob/master/Dockerfile。 这里使用
从已装入的卷(主机目录)中提取UIDstat -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 也许你想改变它们以提高安全性。