我正在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.]
当我在主机上手动运行Jenkins作为我的个人帐户(uid1000(时,这是有效的。但现在我更改了它,让Jenkins由systemd自动启动,并使用一个特定的jenkins
用户,uid为1006,gid为1009:
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运行命令中使用。但是当steps命令开始在容器docker中执行时,里面没有这个值。这就是这个问题的原因:
I have no name!@6d3b27a803e4:/$
对我来说,解决方案是安装";passwd";以及";组";容器内的文件如下:
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 {
image 'your_image'
args '-e HOME=/tmp/home'
}
/tmp对每个人都是可写的。无需创建用户。