AWS Elastic Beanstalk - 使用 ECR 时,/root/.docker/config.json 未使用新凭证更新

Posted

技术标签:

【中文标题】AWS Elastic Beanstalk - 使用 ECR 时,/root/.docker/config.json 未使用新凭证更新【英文标题】:AWS Elastic Beanstalk - /root/.docker/config.json not updated with new credentials when ECR has been used 【发布时间】:2020-03-15 01:55:30 【问题描述】:

我目前正在从 ECR 切换到 GitHub 包来托管我们的 docker 图像。经过大量的试验和错误,以及在拉取图像时收到很多消息,如no basic auth credentials,我开始通过 SSH:ing 深入挖掘 beanstalk 实例以调查实际文件。事实证明,当我使用新凭据更新 S3 存储桶中的 .dockercfg 时,这些凭据会按预期复制到 beanstalk 上的 /root/.dockercfg,但不会反映在 /root/.docker/config.json 中。此文件仅包含 ECR 凭据,而不包含 GitHub 凭据。如果我手动添加 GitHub 凭据,我可以很好地提取图像。 /root/.docker/config.json 似乎覆盖了 /root/.dockercfg 中的凭据,这些凭据仅在部署期间存在。

我该如何解决这个问题?

编辑:

根本原因似乎是 /root/.docker/config.json 是在使用 ECR 时创建的,并且不会由其他私有注册表身份验证更新,因为 ECR 被视为不同。当我设置一个从一开始就使用 GitHub 的新 beanstalk 时,一切都按预期工作。这部分/opt/elasticbeanstalk/hooks/pre/03build.sh 创建文件:

# if the image is in an ECR repo, authenticate with ECR
ECR_IMAGE_PATTERN="^([a-zA-Z0-9][a-zA-Z0-9_-]*)\\.dkr\\.ecr\\.([a-zA-Z0-9][a-zA-Z0-9_-]*)\\.amazonaws\\.com(\\.cn)?/.*"
if [[ $FROM_IMAGE =~ $ECR_IMAGE_PATTERN ]]; then
        ECR_REGISTRY_ID=$BASH_REMATCH[1]
        ECR_REGION=$BASH_REMATCH[2]

        ECR_LOGIN_RESPONSE=`aws ecr get-login --no-include-email --registry-ids $ECR_REGISTRY_ID --region $ECR_REGION 2>&1`
        [ $? -eq 0 ] || error_exit "Failed to authenticate with ECR for registry '$ECR_REGISTRY_ID' in '$ECR_REGION'" 1

        # output of aws ecr get-login should be a "docker login" command, simply invoke it
        echo $ECR_LOGIN_RESPONSE | grep -q "^docker login" || error_exit "Invalid response from 'aws ecr get-login', expecting a 'docker login' command, was: '$ECR_LOGIN_RESPONSE'."
        eval $ECR_LOGIN_RESPONSE
fi

【问题讨论】:

【参考方案1】:

解决方法是删除/root/.docker/config.json 或启用不可变部署以便创建新的 EC2 实例。

【讨论】:

以上是关于AWS Elastic Beanstalk - 使用 ECR 时,/root/.docker/config.json 未使用新凭证更新的主要内容,如果未能解决你的问题,请参考以下文章

Elastic Beanstalk 未创建 RDS 参数

AWS Elastic Beanstalk 与 AMI2 和 docker-compose.yml

Amazon Elastic BeanStalk 错误:无法创建 AWS Elastic Beanstalk 应用程序版本

[AWS] Elastic Beanstalk

AWS Elastic Beanstalk CLI 安装错误

text AWS Elastic Beanstalk