我正在尝试使用 Elasticbeanstalk 在多 Docker 环境中部署 Web 应用程序,并使用存储在 S3 存储桶中的身份验证文件进行存储库身份验证。但我一直收到如下所示的 pullcontainer 错误。
'ECS 任务停止的原因:任务启动失败。(服务器:CannotPullContainerError:守护进程的错误响应:拒绝对测试/图像进行拉取访问,存储库不存在或可能需要'''docker login''':拒绝:请求访问资源被拒绝
我尝试切换到Docker Amazon Linux 2平台进行测试,在该平台上,使用相同的身份验证文件和其中一个私有映像,elasticbeanstalk可以从docker hub中提取映像。
身份验证文件 '.dockercfg' 如下所示,
{
"auths": {
"https://index.docker.io/v1/": {
"auth": "base64(USERNAME:PASSWORD)"
}
},
"HttpHeaders": {
"User-Agent": "Docker-Client/18.09.7 (linux)"
}
}
Dockerrun.aws.json 文件,
{
"AWSEBDockerrunVersion": 2,
"authentication": {
"bucket": "[bucket location]",
"key": ".dockercfg"
},
"containerDefinitions": [
{
"name": "test1",
"image": "test/image1",
"hostname": "test1",
"essential": false,
"memory": 256,
"links" : ["test"]
},
{
"name": "test2",
"image": "test/image2",
"hostname": "test2",
"memory": 256,
"essential": false
},
{
"name": "test3",
"image": "test/image3",
"hostname": "test3",
"essential": true,
"memory": 128,
"portMappings": [
{
"hostPort": 80,
"containerPort": 80
}
],
"links" :["test"]
}
]
}
所有 3 个镜像都是私有的,并且来自同一个存储库。我还尝试将它们全部切换为公共,并且相同的 Dockerrun.aws.json 文件可以正常工作。一旦我将其中任何一个设置为私有,Elatiscbeanstalk 就会遇到无法拉取镜像的问题。
怎么回事?为什么同一个身份验证文件对单个 docker 环境有效,但对多环境却无效?
答案1
我以某种方式解决了这个问题。
目前 Elasticbeanstalk Multicontainer Docker 平台仅支持 Amazon Linux AMI 操作系统。Amazon Linux AMI 所需的授权文件与 Amazon Linux 2 所需的授权文件不同。
授权文件如下所示,
{
"server" :
{
"auth" : "auth_token",
"email" : "email"
}
}