使用ECR时,AWS Elastic Beanstalk-/root/.doker/config.json未更新为新凭据



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

我该如何解决这个问题?

编辑:

根本原因似乎是/root/.docker/config.json是在使用ECR时创建的,并且不会被其他私有注册表身份验证更新,因为ECR的处理方式不同。当我从一开始就使用GitHub建立了一个新的豆茎时,一切都如预期的那样。/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

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

最新更新