我很难将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"的说明,您应该只需要它。
希望对您有所帮助!