在Docker容器中添加用户,运行Jenkins作业时UID不匹配



我正在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对每个人都是可写的。无需创建用户。

最新更新