ElasticBeanstalk-无法从私有Docker Hub存储库中提取Docker映像

时间:2020-09-18 11:46:32

标签: docker amazon-elastic-beanstalk aws-codepipeline dockerhub

我正在将Docker映像部署到ElasticBeanstalk(使用CodePipeline)。我的Dockerrun.aws.json看起来像这样:

{
  "AWSEBDockerrunVersion": "1",
  "Authentication": {
    "Bucket": "mybucket",
    "Key": "docker_hub_auth.json"
  },
  "Image": {
    "Name": "repo/image:tag",
    "Update": "true"
  },
  "Ports": [
    {
      "ContainerPort": "8080"
    }
  ]
}

我从ElasticBeanstalk实例得到错误:Failed to pull Docker image repo/image:tag: Error response from daemon: pull access denied for repo/image, repository does not exist or may require 'docker login': denied: requested access to the resource is denied. Check snapshot logs for details. (Executor::NonZeroExitStatus)

当我切换到实例时,我可以检查 auth文件 docker_hub_auth.json 是否已成功下载。令我惊讶的是,该文件(通过/root/.dockercfg03build.sh下载到download_auth.py。然后调用docker pull。但是我认为码头工人希望在/root/.docker/config.json中进行身份验证!

当我在实例上手动执行docker login时,它将Docker Hub身份验证添加到/root/.docker/config.json并开始部署。但是很明显,如果我的实例被替换或新实例启动,我需要在没有手册docker login的情况下使其工作。

对我来说似乎是个虫子。我能做什么?自动化脚本将auth下载到/root/.dockercfg,但是Docker(Docker版本19.03.6-ce,内部版本369ce74)需要在/root/.docker/config.json中使用它。有什么建议可以克服吗?

更新,已解决

A已经迁移到Amazon Linux 2,现在可以使用了。

2 个答案:

答案 0 :(得分:0)

您可以使用ebextensions运行 bash命令将文件移动到所需位置。

根据下载文件的时间,您可以使用CommandsContainer commands来执行此操作。另外,您也可以使用platform hooks

答案 1 :(得分:0)

我尝试了一个非常类似的问题。几个月前,我已经配置了一个运行Docker并从私有Docker Hub存储库中提取映像的Elastic Beanstalk环境,它的实现与Bitbucket Pipeline一样好。 今天,我尝试为另一个项目再次执行相同的确切过程,但由于出现相同错误,所以无法运行它:Failed to pull Docker image repo/image:tag: Error response from daemon: pull access denied for repo/image, repository does not exist or may require 'docker login': denied: requested access to the resource is denied.

就我而言,解决方案是终止环境并使用在64位Amazon Linux上运行的最新 Docker 创建一个新环境;在我的情况下为 2.15.4

在64位Amazon Linux 2上运行的 Docker 似乎正在发生docker私有存储库的auth错误,可能需要使用 ebextensions 设置一些其他配置,或者的东西。由于该平台分支的当前版本为 3.1.2

但是,我希望有人也可以通过确保为您的Elastic Beanstalk环境使用此Docker-Linux版本来解决他们的问题