AWS ECR 存储库 - 如何从一个账户复制图像并推送到另一个账户

Par*_*ris 15 amazon-web-services docker amazon-ecr

我有两个帐户 - 帐户 A 和帐户 B。在帐户 A 中,我有一个策略,帐户 B 中的用户可以与帐户 A 交互。我在两个帐户中都有一个存储库。帐户 B 没有设置策略(不确定我是否需要帐户 A 与之交互的策略)。

我的问题是如何将 ecr 图像从账户 A 推送到账户 B。我想要一份账户 A 图像的副本到账户 B。这可能吗?

Chr*_*ams 18

这不是 ECR 当前支持的功能,因此您需要执行以下步骤才能从一个帐户迁移到另一个帐户:

  • aws ecr get-login-password --region <region> | docker login --username AWS --password-stdin <aws_account_id>.dkr.ecr.<region>.amazonaws.com - 为源帐户运行这个
  • docker pull $SOURCE_IMAGE:$VERSION - 将最新标签下拉到您的本地
  • docker tag $SOURCE_IMAGE:$VERSION $TARGET_IMAGE:$VERSION-根据原始源图像标记新图像
  • aws ecr get-login-password --region <region> | docker login --username AWS --password-stdin <aws_account_id>.dkr.ecr.<region>.amazonaws.com - 为目标帐户运行这个
  • docker push $TARGET_IMAGE:$VERSION-将 docker 镜像送到目标 ECR 帐户。


Adi*_*iii 5

如果要将所有存储库从特定区域移动到另一个帐户(目标帐户),请使用以下脚本。

  • 它将列出账户 A 的所有回购
  • 从账户A中一一拉取镜像
  • 在账户 B 中创建回购
  • 标签图片
  • 推送镜像到账户 B
#!/bin/bash
TARGET_ACCOUNT_REGION="us-west-2"
DESTINATION_ACCOUNT_REGION="us-west-2"
DESTINATION_ACCOUNT_BASE_PATH="123456.dkr.ecr.$DESTINATION_ACCOUNT_REGION.amazonaws.com/"


REPO_LIST=($(aws ecr describe-repositories --query 'repositories[].repositoryUri' --output text --region $TARGET_ACCOUNT_REGION))
REPO_NAME=($(aws ecr describe-repositories --query 'repositories[].repositoryName' --output text --region $TARGET_ACCOUNT_REGION))


for repo_url in ${!REPO_LIST[@]}; do
        echo "star pulling image ${REPO_LIST[$repo_url]} from Target account"
        docker pull ${REPO_LIST[$repo_url]}


        # Create repo in destination account, remove this line if already created
        aws ecr create-repository --repository-name ${REPO_NAME[$repo_url]}
        docker tag   ${REPO_LIST[$repo_url]} $DESTINATION_ACCOUNT_BASE_PATH/${REPO_NAME[$repo_url]} 
        docker push $DESTINATION_ACCOUNT_BASE_PATH/${REPO_NAME[$repo_url]} 
done
Run Code Online (Sandbox Code Playgroud)

确保您已经获得两个帐户的登录令牌或在脚本中添加这些命令。

        aws ecr get-login-password --region $TARGET_ACCOUNT_REGION | docker login --username AWS --password-stdin ${REPO_LIST[$repo_url]}
        # destination account login, make sure profile set for accoutn destination
        aws ecr get-login-password --region $DESTINATION_ACCOUNT_REGION --profile destination_account | docker login --username AWS --password-stdin ${REPO_LIST[$repo_url]}
Run Code Online (Sandbox Code Playgroud)

aws-cli-备忘单

或者您可以使用其中之一

Cron 帐户复制

Amazon ECR 使用注册表设置在注册表级别配置功能。为每个区域单独配置私有注册表设置。目前,唯一的注册表设置是复制设置,用于配置存储库中图像的跨区域和跨帐户复制


Rav*_*nam 5

AWS 中的跨区域/账户复制功能

AWS已推出CRR(跨区域复制)和CAR(跨账户复制)点击此处了解更多信息