将docker image推送到amazon ecs存储库

Ohm*_*men 59 containers amazon-web-services docker

我是AWS新手.我想在AWS ECS容器实例上设置私有docker存储库.我创建了一个名为存储库name.AWS显示的示例推送命令正在运行.

aws ecr get-login --region us-west-2 
docker build -t name .
docker tag name:latest ############.dkr.ecr.us-west-2.amazonaws.com/name:latest 
docker push ############.dkr.ecr.us-west-2.amazonaws.com/name:latest
Run Code Online (Sandbox Code Playgroud)

但是使用这些命令,我​​构建并推送了一个名为的图像name,我想构建一个名为的图像foo.所以我将命令改为:

docker build -t foo .
docker tag foo ###########.dkr.ecr.us-west-2.amazonaws.com/name/foo
docker push ###########.dkr.ecr.us-west-2.amazonaws.com/name/foo
Run Code Online (Sandbox Code Playgroud)

这应该有效,但事实并非如此.经过一段时间的重试后,我得到了错误:

The push refers to a repository [###########.dkr.ecr.us-west-2.amazonaws.com/name/foo]
8cc63cf4528f: Retrying in 1 second
...
name unknown: The repository with name 'name/foo' does not exist in the registry with id '############'
Run Code Online (Sandbox Code Playgroud)

AWS是否真的需要为我要推送的每个图像提供专用存储库?

Mat*_*att 65

EC2容器注册需要一个像仓库要设置为你想要发布到注册表中的每个图像"名"或"命名空间/名称".

您可以:tags在每个存储库中发布您想要的任何内容(默认限制为100个标记).

我没有在AWS文档中看到任何具体说明存储库的地方 - >图像名称映射,但它是由创建存储库隐含的- ECR用户指南中的第6d节

码头工人形象规范包括它的定义中的

知识库

在公共前缀(之前的名称组件:)下分组的标签集合.例如,在使用名称标记的图像中 my-app:3.1.4,my-app是名称的Repository组件.存储库名称由斜杠分隔的名称组件组成,可选地以DNS主机名为前缀.主机名必须符合标准DNS规则,但可能不包含_字符.如果存在主机名,则可以选择后跟格式化的端口号 :8080.名称组件可能包含小写字符,数字和分隔符.分隔符定义为句点,一个或两个下划线,或一个或多个破折号.名称组件不能以分隔符开头或结尾.

  • 是否有任何文档明确说明每个注册表一个图像? (6认同)
  • @Matt我希望他们(aws)能够确定这一点并使其成为一个难以理解的事实.我不喜欢松散的解释,因为他们的文档是写的. (5认同)
  • 啊..我不认为AWS明确声明他们的ECR Repository概念涉及单个Docker镜像`name`或`namespace/name`.我第一次尝试了解它.https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html上的第6d节暗示了一个名称/多标签存储库设置,其中包含`repository:latest`的映像构建标记 (4认同)

ece*_*ulm 27

您需要为每个图像名称创建一个存储库,但图像名称可以是"mycompanyname/helloworld"形式.所以你创建mycompanyname/app1,mycompanyname/app2等等

aws ecr create-repository --repository-name mycompanyname/helloworld
aws ecr create-repository --repository-name mycompanyname/app1
aws ecr create-repository --repository-name mycompanyname/app2
docker tag helloworld:latest xxxxxxxx.dkr.ecr.us-west-2.amazonaws.com/mycompanyname/helloworld:latest
docker push xxxxxxxx.dkr.ecr.us-west-2.amazonaws.com/mycompanyname/helloworld:latest
docker tag app1:latest xxxxxxxx.dkr.ecr.us-west-2.amazonaws.com/mycompanyname/app1:latest
docker push xxxxxxxx.dkr.ecr.us-west-2.amazonaws.com/mycompanyname/app1:latest
Run Code Online (Sandbox Code Playgroud)

  • 这很有效,顺便说一句,ACR 不需要先手动创建代表。 (2认同)

Ste*_*Shi 8

我尝试了以下步骤并确认为我工作:

  1. aws ecr get-login-password --region us-west-2 | aws ecr get-login-password --region us-west-2 | docker 登录 --用户名 AWS --密码-stdin xxxxxxxx.dkr.ecr.us-west-2.amazonaws.com

  2. aws ecr create-repository --repository-name 测试

  3. docker build -t 测试。

  4. docker 标签测试:最新 xxxxxxxx.dkr.ecr.us-west-2.amazonaws.com/test:latest

  5. docker 推送 xxxxxxxx.dkr.ecr.us-west-2.amazonaws.com/test:latest