docker login - 存储凭据时出错 - 写入权限错误

时间:2017-03-14 13:48:13

标签: docker

我正在运行$\{hcvarAuthorLastName\}命令作为Bamboo构建作业的一部分。命令文本通过docker login调用获得并在子shell中执行。

当作为Bamboo构建的一部分运行时,此命令以aws ecr get-login失败,但完全相同的命令在作为构建代理的Mac上的终端中运行,它成功。

使用终端:

  • Error saving credentials: error storing credentials - err: exit status 1, out: write permissions error成功并返回aws ecr get-login命令文本
  • docker login成功并登录
  • KeyChain中有ECR URL的记录
  • docker login -u ... -p ... -e none ...
  • 中有一个条目

使用Bamboo:

  • ~/.docker/config.json成功并返回aws ecr get-login命令文本
  • docker login因上述错误而失败
  • KeyChain记录可供所有应用程序使用,没有任何区别'
  • docker login -u ... -p ... -e none ...没有任何区别

Bamboo构建和终端会话都发生在同一个用户chmod 777 ~/.docker/config.json下。 builduser对两者都是一样的。 whoami对于两者都是相同的 - 两者都可写。

你能想到更多的方法来发现上下文之间的差异Bamboo运行内置和我在终端中运行吗?上面的错误,与stat ~/.docker/config.json相关的错误,无法在网上找到。

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

我在尝试使用ECR在具有I​​AM实例配置文件的AWS EC2实例上的Jenkins管道中获取Docker容器运行时发现了这个问题。我发现了很多关于从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")
                }
            }
        }
    }
}

注意:

  • Docker login命令改变.docker / config.json文件,在某些情况下出现写入错误似乎失败。我的猜测是,它无法处理文件中现有配置的某些组合并出错。使用DOCKER_CONFIG环境变量可以在本地创建新的配置文件。
  • 可能没有必要删除$ {DOCKER_CONFIG}目录,并且可能需要一些额外的时间。但是,我认为这可能会避免存储在其中的凭据过时的情况。
  • 必须安装:https://github.com/awslabs/amazon-ecr-credential-helper
  • 我在这里找到了eval语句解决方案:Jenkins Amazon ECR: no basic auth credentials

答案 2 :(得分:1)

您可以删除文件class NeuralNet2(nn.Module): def __init__(self): super(NeuralNet2, self).__init__() self.input = nn.Linear(2, 40) self.hiddenLeft = nn.Linear(40, 2) self.hiddenRight = nn.Linear(40, 2) self.out = nn.Linear(4, 4) def forward(self, x): x = self.input(x) xLeft, xRight = torch.sigmoid(self.hiddenLeft(x)), torch.sigmoid(self.hiddenRight(x)) x = torch.cat((xLeft, xRight)) x = self.out(x) return x

docker-credential-osxkeychain

答案 3 :(得分:0)

对我来说,最简单的解决方案是在用户主目录内的.docker目录下创建config.json文件:

〜/ home / .docker / config.json

然后,我从服务器上复制了该文件的内容,并从该服务器登录到Docker集线器。

{
        "auths": {
                "https://index.docker.io/v1/": {
                        "auth": "SOMEVALUE"
                }
        },
        "HttpHeaders": {
                "User-Agent": "Docker-Client/18.06.1-ce (linux)"
        }

}