我已经尝试以非超级用户身份运行构建器docker映像两天了,但是我遇到了各种各样的问题。我面临的最简单的问题是,如果我想运行此管道,我的jenkins构建将继续挂起:
node('') {
stage ('test') {
withDockerContainer(image: 'openjdk:8-jdk', args: '-u 1000', toolName: env.DOCKER_TOOL_NAME) {
sh 'amir'
}
}
}
答案 0 :(得分:0)
在对该问题进行了更多调查并通读了https://medium.com/@mccode/understanding-how-uid-and-gid-work-in-docker-containers-c37a01d01cf之后(总而言之,博客说的是uid和gid是重要的,而不是用户名),我决定更改我的方法,使其不使用'-u 1000',但未指定用户,而是使用与正在构建的詹金斯相同的uid和gid构建我的图像。 换句话说,现在我的管道是: 构建一个通过jenkins uid和gid传递的docker镜像,作为docker build param Dockerfile:
ARG UID=1000
ARG GID=1000
RUN groupadd -g ${GID} $RUNNER_USER
RUN useradd -u ${UID} -g ${GID} -ms /bin/bash $RUNNER_USER
我的jenkins管道docker构建部分:
docker.build("$dockerImage", '--build-arg UID=$(id -u) --build-arg GID=$(id -g) .')
在已构建的docker映像上运行构建:
withDockerContainer(image: dockerImage, args: '--net="host"', toolName: env.DOCKER_TOOL_NAME) {
// do the build, e.x. sh "mvn clean package"
}