我是 docker 的新手,所以如果这是我遗漏的一个相当明显的过程,我确实为前面的愚蠢问题道歉。
我正在使用以下命令设置持续集成服务器jenkins
泊坞窗图像。我做了一个docker pull jenkins
,并创建了一个用户jenkins
让我能够安装/var/jenkins_home
在我的主机的容器中/var/jenkins_home
(也归jenkins:jenkins
user).
问题是容器似乎定义了jenkins
用户的 uid 为 102,但我的主机有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
我只是简单地为主机制作 uidjenkins
用户为 102/etc/passwd
,但该 uid 已被 sshd 占用。我认为解决方案是将容器更改为使用 uid 1002,但我不确定如何操作。
Edit
实际上,主机上的用户102是messagebus,而不是sshd。
请看一下我刚刚上传的docker文件:https://github.com/bdruemen/jenkins-docker-uid-from-volume/blob/master/Dockerfile 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 位于 docker 中,可以访问主机 docker https://stackoverflow.com/questions/30072491/jenkins-in-docker-with-access-to-host-docker/32953034#32953034也许您想更改两者以提高安全性。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)