在 Jenkins 中以非 root 用户身份运行 Docker 镜像

时间:2021-03-05 11:00:38

标签: docker jenkins

我在 DevOps 方面没有太多经验,而且我在 Jenkins 中需要完成的任务有点困难。

我们正在开发一个 API,该 API 构建为在 Jenkins 中作为 Docker 容器运行,该容器在远程构建服务器上运行。我了解到,从安全角度来看,以 root 身份运行 Docker 容器通常是不好的做法,因此我已将用户添加到 Dockerfile 中,以解决此问题:

# Use internal user rather than root
RUN groupadd -r app && useradd -r -g app -s /bin/bash user

...

USER user
CMD ["/bin/bash", "/start.sh"]

我认为这对于安全方面来说没有问题,但是在 Jenkins 中运行容器会产生一些意想不到的问题。在我们用于 API 的 Jenkinsfile 中,在构建映像后,它是这样启动的(在将用户添加到 Dockerfile 之后,最初它以 root 身份运行):

stage('Run tests against Docker image') {

    ...set up stages e.g. build docker image

            agent {
                docker {
                    image "${DOCKER_IMAGE_NAME_ADMIN}:${DOCKER_IMAGE_TAG}"
                    args "--user=user:app" // This was originally --user=root
                }
            }

            ...

            stages {
                stage('Copy secrets file') {
                    steps { sh 'cd ${APP_DIR} && cp server/config/environment/secrets.ci.js server/config/environment/secrets.js' }
                }

                ...stages where tests are run

最初 user 尝试执行 cp 命令时存在写入权限问题,但通过 chmod 中的 dockerfile 解决了这个问题。但是,现在在同一阶段存在一个问题,即用户和写入 Jenkins 日志的权限(取自 Jenkins 控制台输出):

touch: cannot touch '/var/lib/jenkins/workspace/app_name_PR-852@2@tmp/durable-0ab9d0ab/jenkins-log.txt': Permission denied

有没有什么办法可以让创建的用户获得这样做的权限,而不必以 root 身份运行容器?

0 个答案:

没有答案
相关问题