Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 无法从ECS群集中运行的容器实例上的amazon ECS专用存储库中提取映像_Amazon Web Services_Docker_Amazon Ecs - Fatal编程技术网

Amazon web services 无法从ECS群集中运行的容器实例上的amazon ECS专用存储库中提取映像

Amazon web services 无法从ECS群集中运行的容器实例上的amazon ECS专用存储库中提取映像,amazon-web-services,docker,amazon-ecs,Amazon Web Services,Docker,Amazon Ecs,我已经在AWS ECS上创建了一个非默认集群,我能够从docker公共存储库中提取docker映像并运行它进行测试 然后我创建了一个ECS私有repo,并构建了一个映像并将其推送到这个存储库,它成功了。但当我尝试使用docker pull手动拉取时,它会抱怨以下错误: 来自守护进程的错误响应:Get :无基本身份验证凭据 IAM角色和权限似乎存在问题,但我不确定要更改哪个角色/策略。您需要首先针对ECR进行身份验证。本地AWS凭据本身不足以允许您从专用ECR存储库中提取。事先尝试一下这样的方法:

我已经在AWS ECS上创建了一个非默认集群,我能够从docker公共存储库中提取docker映像并运行它进行测试

然后我创建了一个ECS私有repo,并构建了一个映像并将其推送到这个存储库,它成功了。但当我尝试使用docker pull手动拉取时,它会抱怨以下错误:

来自守护进程的错误响应:Get :无基本身份验证凭据


IAM角色和权限似乎存在问题,但我不确定要更改哪个角色/策略。

您需要首先针对ECR进行身份验证。本地AWS凭据本身不足以允许您从专用ECR存储库中提取。事先尝试一下这样的方法:

$(aws ecr get-login --registry-ids <YOUR-ID> --region <YOUR-REGION>)
$(aws ecr get登录--注册表ID--区域)
它将针对ECR为您执行
docker登录
,允许您提取私有映像(假设您的本地AWS凭据具有所需权限)

有关更多信息,请参阅ECS容器(任务)定义中的。

中的“步骤1:将Docker验证到默认注册表” 如果您使用的是专用ECR存储库:

不要选中私有存储库身份验证选项,因为ECR不使用用户名密码身份验证,它将使用IAM角色/用户权限。然后,只需确保ECS IAM角色(默认情况下称为摇头丸执行角色)具有从ECR提取图像的权限,如果ECS IAM角色自己没有添加以下行:

"ecr:GetAuthorizationToken",
"ecr:BatchCheckLayerAvailability",
"ecr:GetDownloadUrlForLayer",
"ecr:BatchGetImage",

如果您使用的是非ECR专用存储库:


检查私有存储库身份验证选项,并使用

提供您的用户名密码。如何将图像推送到ECS私有存储库?是ECR吗?@Apolozeus是的,我可以将图像推送到ECS私有repo。你能检查一下你是否有
ECR:GetDownloadUrlForLayer,ecr:BatchGetImage和ecr:BatchCheckLayerAvailability
权限?我希望在我的ec2instance上我不必登录,而且我应该能够在我的ec2instance上拉取图像而不必登录。作为创建aws_launch_配置的一部分,我指定了实例_配置文件,它将角色与配置文件_策略联系起来。配置文件策略有:“ecr:GetAuthorizationToken”、“ecr:BatchGetImage”。。。因此,我假设在一个实例上,我应该能够手动拉取映像,而不需要实际手动登录ecs注册表。当然,上述工作只是因为我承担了适当的角色,例如作为launchconfiguration的一部分启动的rolepolicy不需要手动登录。我不知道ecs代理在实例上运行任务定义时,实际上是如何从repo中提取映像的。