AWS ElasticBeanstalk 从 Gitlab 注册表中提取 Docker 映像

问题描述 投票:0回答:2

我很难将 Docker 映像从私有 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
登录时,它工作正常。

amazon-web-services docker gitlab gitlab-ci amazon-elastic-beanstalk
2个回答
2
投票

gitlab部署令牌不是身份验证密钥。

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

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 文档 “使用私有存储库中的图像 “,你应该只拿需要的东西。

希望这对你有帮助!


0
投票

仅将部署令牌放入“auth”值中也对我不起作用。结果使用了这样的格式“deploy_token_name:deploy_token”并将其编码为base64。在我的 gitlab-ci.yml 中使用了这样的脚本

export DEPLOY_TOKEN=$(echo "$GITLAB_DEPLOY_USER:$GITLAB_DEPLOY_TOKEN" | tr -d "\n" | base64)
© www.soinside.com 2019 - 2024. All rights reserved.