我很难将Docker镜像从私有(private)Gitlab注册表中提取到AWS MultiContainer ElasticBeanstalk环境中。

我在与群集相同的区域中将 .dockercfg 添加到S3中,并且还允许aws-elasticbeanstalk-ec2-role IAM角色从S3中获取数据。

ElasticBeanstalk始终返回错误 CannotPullContainerError:API错误(500)

我的 .dockercfg 的格式为:

{
    "https://registry.gitlab.com" : {
      "auth" : “my gitlab deploy token“,
      "email" : “my gitlab token name“
    }
}

Dockerrun.aws.json 内部,我添加了以下内容
  "authentication": {
    "bucket": "name of my bucket",
    "key": ".dockercfg"
  },

当我尝试通过docker login -u gitlabtoken-name -p token登录时,它可以正常运行。

最佳答案

gitlab部署 token 不是auth密钥。

为了生成正确的身份验证密钥,我通常执行以下操作:

docker run -ti docker:dind sh -c "docker login -u name -p deploy-token registry.gitlab.com && cat /root/.docker/config.json"

它会打印类似:
{
  "auths": {
    "registry.gitlab.com": {
      "auth": "your-auth-key"
    }
  },
  "HttpHeaders": {
    "User-Agent": "Docker-Client/18.09.0 (linux)"
  }
}

然后,按照elasticbeanstalk docs "Using Images From a Private Repository"的说明,您应该只需要它。

希望对您有所帮助!

08-25 00:47