dockerlogin – 错误存储凭据 – 写入权限错误

作为Bamboo构build作业的一部分,我正在运行docker login命令。 命令文本通过aws ecr get-login调用获得,并在子shell中执行。

此命令失败, Error saving credentials: error storing credentials - err: exit status 1, out: write permissions error作为Bamboo构build的一部分运行时出现Error saving credentials: error storing credentials - err: exit status 1, out: write permissions error ,但完全相同的命令在terminal上运行,构build代理的Mac ,它成功了。

使用terminal:

  • aws ecr get-login成功并返回docker login命令文本
  • docker login -u ... -p ... -e none ...成功并login
  • KeyChain中的ECR URL有logging
  • ~/.docker/config.json有一个条目

使用竹子:

  • aws ecr get-login成功并返回docker login命令文本
  • docker login -u ... -p ... -e none ...与上述错误失败
  • KeyChainlogging被提供给所有的应用程序没有任何区别“
  • chmod 777 ~/.docker/config.json没有区别

Bamboo构build和terminal会话都在同一个用户builduserwhoami是两个相同的。 stat ~/.docker/config.json对于两者都是相同的 – 对于两者都是可写的。

你能想出更多的方法来发现竹子运行的内容和我在terminal中的区别吗? 上面的错误,与docker login相关,无处可docker login

我不得不删除我现有的config.json文件。 它不会覆盖或修改我的。

我在尝试使用ECR获取在具有IAM实例configuration文件的AWS EC2实例的Jenkinspipe道中运行的Docker容器时发现此问题。 我发现了许多关于创build,推送和从ECR拉取实例的信息,但没有运行。

目标是安装特定的Ruby和Ansible版本的Docker容器,以及像Gem文件一样的各种依赖项。

我发现下面的Jenkinsfile工作:

 pipeline { agent any environment { DOCKER_CONFIG = "${WORKSPACE}/docker.config" } stages { stage('Build') { steps { sh("rm -rf ${DOCKER_CONFIG}") sh("eval \$(aws ecr get-login --no-include-email | sed 's|https://||')") withDockerContainer(args: '-v ${WORKSPACE}:/scripts -v ${HOME}/.aws:/root/.aws', image: 'image_name:latest') { sh("ruby script.rb") } } } } } 

笔记:

  • Dockerlogin命令会改变.docker / config.json文件,并且在某些情况下出现写入错误。 我的猜测是,它不能处理文件中的现有configuration和错误的一些组合。 使用DOCKER_CONFIG环境variables使其在本地创build一个新的configuration文件。
  • 删除$ {DOCKER_CONFIG}目录可能不是必要的,可能需要一些额外的时间。 不过,我认为这可能会避免在那里存储的证书陈旧的情况。
  • 这必须安装: https : //github.com/awslabs/amazon-ecr-credential-helper
  • 我在这里find了eval语句解决scheme: Jenkins Amazon ECR:没有基本的authentication凭证