【发布时间】:2020-10-31 12:49:51
【问题描述】:
我有两个帐户 - 帐户 A 和帐户 B。在帐户 A 中,我有一个策略,帐户 B 中的用户可以与帐户 A 交互。我在两个帐户中都有一个存储库。帐户 B 没有设置策略(不确定我是否需要帐户 A 与之交互的策略)。
我的问题是如何将帐户 A 中的 ecr 图像推送到帐户 B。我想要帐户 A 图像的副本到帐户 B。这可能吗?
【问题讨论】:
标签: amazon-web-services docker amazon-ecr
我有两个帐户 - 帐户 A 和帐户 B。在帐户 A 中,我有一个策略,帐户 B 中的用户可以与帐户 A 交互。我在两个帐户中都有一个存储库。帐户 B 没有设置策略(不确定我是否需要帐户 A 与之交互的策略)。
我的问题是如何将帐户 A 中的 ecr 图像推送到帐户 B。我想要帐户 A 图像的副本到帐户 B。这可能吗?
【问题讨论】:
标签: amazon-web-services docker amazon-ecr
这不是当前支持的 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 - Tag 基于原始源图像的新图像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 - Push docker 镜像到目标 ECR 帐户。【讨论】:
aws ecr get-login-password --region <region> | docker login --username AWS --password-stdin <aws_account_id>.dkr.ecr.<region>.amazonaws.com
如果您想将所有存储库从特定区域移动到另一个帐户(目标帐户),请使用以下脚本。
#!/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
确保您已获得两个帐户的登录令牌或在脚本中添加这些命令。
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]}
或者你可以使用其中之一
Amazon ECR 使用注册表设置在 注册表级别。已配置私有注册表设置 分别为每个区域。目前,唯一的注册表设置是 复制设置,用于配置跨区域和 跨帐户复制存储库中的图像
【讨论】:
docker pull ${REPO_LIST[$repo_url]} 我很困惑:这不会只是从每个回购中提取“最新”图像吗?问题不就是如何将所有图像从 A 复制到 B 吗?
AWS 中的跨区域/账户复制功能
AWS已经推出CRR(跨区域复制)和CAR(跨账户复制)Click here for more info
【讨论】: