具有私有存储库的 AWS Elastic Beanstalk 多容器 Docker 上出现 CannotPullContainerError

具有私有存储库的 AWS Elastic Beanstalk 多容器 Docker 上出现 CannotPullContainerError

我正在尝试使用 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"
    }
}

详细信息请参阅文档 https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_docker.container.console.html#docker-alami

相关内容