【问题标题】:Running commands in a docker container in Jenkins在 Jenkins 的 docker 容器中运行命令
【发布时间】:2020-04-08 13:03:57
【问题描述】:

目前我正在尝试在 jenkins 中运行一个容器,以调用 aws ecr 以查找最新图像。为此,我需要设置 aws configure 参数,但是我不知道为什么这不起作用,因为容器以 root 身份运行,因为尚未定义 USER 命令。

但是,每当我运行容器时,我都会收到以下消息

+ docker inspect -f . mikesir87/aws-cli
.
[Pipeline] withDockerContainer
Jenkins does not seem to be running inside a container
$ docker run -t -d -u 112:114 -w /var/lib/jenkins/workspace/xxxx@2 -v /var/lib/jenkins/workspace/xxxx@2:/var/lib/jenkins/workspace/xxxx@2:rw,z -v /var/lib/jenkins/workspace/xxxx@2@tmp:/var/lib/jenkins/workspace/xxxx@2@tmp:rw,z -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** mikesir87/aws-cli cat
$ docker top de3435a8a54f6afa42f8136a57ec67b2720c655328f1aadc0addeb412a92240f -eo pid,comm
[Pipeline] {
[Pipeline] script
[Pipeline] {
[Pipeline] sh
+ pwd
/var/lib/jenkins/workspace/xxxx@2
[Pipeline] sh
+ aws configure set aws_access_key_id key
[Errno 13] Permission denied: '/.aws'

我不明白的是,如果我尝试从 bash 启动此容器,我不会收到此权限被拒绝错误。詹金斯文件见下文

        stage('Check Container Version')
        {
            agent
            {
                docker { image 'mikesir87/aws-cli' }
            }
            steps
            {
                script
                {
                    sh '''pwd'''
                    sh ''' aws configure set aws_access_key_id key'''

                }
            }
        }

容器是从 docker hub 抓取的,下面是 dockerfile

FROM python:alpine

ARG CLI_VERSION=1.18.37

RUN apk -uv add --no-cache groff jq less && \
    pip install --no-cache-dir awscli==$CLI_VERSION

WORKDIR /aws

CMD sh

【问题讨论】:

    标签: amazon-web-services docker jenkins jenkins-pipeline


    【解决方案1】:

    当在 Jenkins Pipeline 中作为 Docker 代理执行时,容器实际上并没有以 root 用户身份运行。您可以在上面的管道输出中注意到:

    docker run -t -d -u 112:114 ...

    由于您想解决以 root 用户运行容器的权限问题,您可以修改代理参数以允许这样做:

    agent {
      docker { image 'mikesir87/aws-cli'
               args '-u root:root' 
      }
    }
    

    然后您的容器用户应该拥有 AWS 配置所需的权限。

    【讨论】:

    • 干杯马特自己也注意到了 = facepalm。但至少看到这个问题的其他人不会遇到同样的问题。
    • @ION 几个月前我自己也遇到过类似的问题,所以你肯定并不孤单,这就是为什么我知道发生了什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-25
    • 2019-03-08
    • 2018-05-12
    • 2020-06-24
    相关资源
    最近更新 更多