我很难将 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
登录时,它工作正常。
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 文档 “使用私有存储库中的图像 “,你应该只拿需要的东西。
希望这对你有帮助!
仅将部署令牌放入“auth”值中也对我不起作用。结果使用了这样的格式“deploy_token_name:deploy_token”并将其编码为base64。在我的 gitlab-ci.yml 中使用了这样的脚本
export DEPLOY_TOKEN=$(echo "$GITLAB_DEPLOY_USER:$GITLAB_DEPLOY_TOKEN" | tr -d "\n" | base64)