我正在 Docker 容器中运行 Jenkins 管道。 Docker 容器创建一个非特权用户来运行:
RUN useradd jenkins --shell /bin/bash --create-home
RUN mkdir -p /home/jenkins/src && chown -R jenkins:jenkins /home/jenkins
USER jenkins
WORKDIR /home/jenkins/src
Jenkins 将其运行为:
docker run -t -d -u 1000:1000 [-v and -e flags etc.]
当我在主机上以我的个人帐户(uid 1000)手动运行 Jenkins 时,此功能有效。但现在我更改了它,以便 Jenkins 由 systemd 自动启动,并使用 uid 1006、gid 1009 的特定 jenkins
用户:
docker run -t -d -u 1006:1009 [-v and -e flags etc.]
这种不匹配导致我的构建失败。我也遇到各种各样的问题,比如容器中的这个提示:
I have no name!@6d3b27a803e4:/$
在容器中创建 jenkins 用户似乎应该有一个配方。 如何使主机和容器上的 UID 匹配?最佳实践是什么?
- 向 Dockerfile 添加类似
usermod --uid $HOST_UID jenkins
的内容? - 似乎没有办法告诉 Docker 将主机 uid 1006 映射到容器 uid 1000,是吗?
最佳答案
在运行 Jenkins 作业时,我遇到了同样的问题,并发现解决方案适合我。 正如您上面所写,如果您在容器中运行作业,Jenkins 会自动启动 Docker,如下所示:
docker run -t -d -u 113:117 [-v and -e flags etc.]
他在本地获取他的 UID 和 GID 并在 Docker run 命令中使用。但是当步骤命令开始在容器中执行时,docker 内部没有这个值。这是造成这个麻烦的原因:
I have no name!@6d3b27a803e4:/$
我的解决方案是在容器内安装“passwd”和“group”文件,如下所示:
pipeline {
agent {
docker {
image 'your_image'
args '-v /etc/passwd:/etc/passwd -v /etc/group:/etc/group'
}
}
stages {
stage('stage_name') {
steps {
sh '''
some_commands
'''
}
}
}
并在 Dockerfile 中创建用户,如下所示:
RUN groupadd jenkins && useradd -m -d /var/lib/jenkins -g jenkins -G root jenkins
希望这对某人有帮助)
关于docker - 在 Docker 容器中添加用户,运行 Jenkins 作业时 UID 不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67477059/