【发布时间】:2021-01-05 08:36:56
【问题描述】:
我正在将 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)
当我 ssh 到实例时,我可以检查 auth 文件 docker_hub_auth.json 正在成功下载。令我惊讶的是,该文件被下载到/root/.dockercfg(来自03build.sh 通过download_auth.py)。然后docker pull 被调用。但我假设 docker 期望在/root/.docker/config.json 中进行身份验证!
当我在实例上手动执行 docker login 时,它会将 Docker Hub 身份验证添加到 /root/.docker/config.json 并部署开始工作。但显然我需要在没有手动 docker login 的情况下使其工作,以防我的实例被替换或新实例启动。
对我来说这似乎是一个错误。我能做些什么?自动脚本将身份验证下载到/root/.dockercfg,但 docker(Docker 版本 19.03.6-ce,内部版本 369ce74)需要在/root/.docker/config.json 中使用它。有什么建议可以克服吗?
更新,已解决
A 已迁移到 Amazon Linux 2,现在它可以工作了。
【问题讨论】:
-
嗨,我遇到了类似的问题,文件正确存储在 /root/.docker/config 上,并检查了我的 cloudwatch 日志,存储桶中的身份验证文件已正确下载,但我没有似乎无法找到它在 Linux 操作系统上的存储位置。你是怎么发现你的在那个目录上的?谢谢
-
03build.sh脚本将身份验证文件从 S3 下载到/root/.dockercfg。然后它运行docker pull,然后删除.dockercfg。我已经建立了与实例的 ssh 连接,并且在 CodePipeline 的部署阶段每秒手动执行sudo cat /root/.dockercfg。在某一时刻,文件内容被打印到控制台。 -
我看到你更新到 Solved。好消息!如果您能支持我的回答,我将不胜感激
-
@FaridHajnal - 您建议使用 Amazon Linux。你说错误发生在 Amazon Linux 2 上。但是我有完全相反的经验。抱歉,无法投票。
标签: docker amazon-elastic-beanstalk aws-codepipeline dockerhub