问题标签 [amazon-ecr]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
673 浏览

amazon-web-services - AWS ECR 重命名标签

根据https://docs.aws.amazon.com/AmazonECR/latest/userguide/retag-aws-cli.html,它描述了如何重新标记现有图像的标签。

所以我尝试执行命令。

  1. MANIFEST=$(aws ecr batch-get-image --repository-name test --image-ids imageTag=latest --query 'images[].imageManifest' --output text)

  2. aws ecr put-image --repository-name test --image-tag old-version --image-manifest "$MANIFEST"

(此命令查找具有latest并将其更改为的图像old-version

预期的重命名标签是旧版本。

但是当我签入 ECR 时,它同时具有latestold-version.

如何删除latest标签并将其old-version仅提供给标签?

0 投票
1 回答
248 浏览

amazon-web-services - 使用 AWS ECS 部署新的 docker 映像

我有一个 ECS 集群,其中有一个服务正在运行我定义的任务。它只是一个简单的烧瓶服务器,因为我正在学习如何使用 ECS。现在我正在尝试了解如何更新我的应用程序并使其无缝部署。

  1. 我从烧瓶服务器返回开始Hello, World! (rev=1)
  2. 我修改我的app.py本地说Hello, World! (rev=2)
  3. 我重建 docker 映像,并推送到 ECR
  4. 由于我的图像仍然命名为image_name:latest,我可以简单地更新服务并强制执行新部署:aws ecs update-service --force-new-deployment --cluster hello-cluster --service hello-service
  5. 我的最小百分比设置为 100,最大值设置为 200%(使用滚动更新),所以我假设在关闭旧的 EC2 实例时应该设置一个新的 EC2 实例。我观察到(不断刷新 ELB HTTP 端点)是 rev=? 在消息中来回交替:(rev=1)然后(rev=2)没有失败(循环,不是随机)。
  6. 然后过了一点点(可能是 30 秒?)翻转停止并出现新消息:Hello, World! (rev=2)
  7. 在整个过程中,我注意到没有更多的 EC2 实例被启动。所以这一切一定是在同一个实例上发生的。

这里发生了什么?这是在 ECS 中更新应用程序的正确方法吗?

0 投票
2 回答
5012 浏览

amazon-web-services - AWS ECS:VPC 终端节点和 NAT 网关

根据关于NAT 网关的 AWS 文档,它们无法通过VPC 端点发送流量,除非以下列方式设置:

NAT 网关无法通过 VPC 端点发送流量 [...]。如果私有子网中的实例必须通过 VPC 端点访问资源 [...],请使用私有子网的路由表将流量直接路由到这些设备。

按照文档中的这个示例,我为我的 ECS 应用程序创建了以下配置:

  1. vpc-app具有 CIDR 172.31.0.0/16 的VPC ( )。
  2. subnet-app具有以下路由表的应用子网 ( ):
  1. 子网中的NAT 网关 ( nat-main)具有以下路由表:vpc-appdefault-1
  1. 安全组 ( sg-app),端口 443 为subnet-app.
  2. VPC Endpoints (Interface type) with vpc-app,subnet-appsg-app以下服务:

同样重要的是,我已经为和VPC 端点启用了DNS 解析DNS 主机名vpc-app以及启用私有 DNS 名称选项。ecr-dkrecr-api

我也尝试过仅使用Fargate容器,因为它们没有ECS Agent的额外复杂性,并且因为根据文档:

使用 Fargate 启动类型的任务仅需要 com.amazonaws.region.ecr.dkr Amazon ECR VPC 终端节点和 Amazon S3 网关终端节点即可利用此功能。

这也不起作用,每次我的Fargate任务运行时,我都会在's Monitoring下看到Bytes out to source的峰值。nat-main

无论我尝试什么,其中的 EC2 实例(和 Fargate 任务)subnet-app仍在使用nat-main而不是转到 ECR 服务的本地地址来拉取图像。

我已重新启动ECS 代理并确保选中ECS 接口 VPC 端点指南和ECR 接口端点指南中的所有框。

我在这里想念什么?

任何帮助,将不胜感激。

0 投票
1 回答
878 浏览

docker - Docker is pulling image from remote registry but I want to use a local image

I have this simple run command:

but I get this error:

Error response from daemon: manifest for example.com/interos-jenkins:latest not found

So for whatever reason docker is looking the image in the remote register, if I run docker images locally, I see:

so does anyone know why this is happening and how I can use the local images instead of the remote?

My guess is that the first match for "interos-jenkins" has the remote url in it?

Update, nvm, I was running this command beforehand and didn't realize it:

I guess I still want to know if there is a way to tell docker to run an image from a remote url or to run the local one.

0 投票
0 回答
360 浏览

amazon-web-services - 将运行中的 ECS 容器保存为新镜像并上传到 ECR

我正在将 Apache、MySQL 和 memcached docker 容器从 AWS ECR 启动到 ECS 实例中。工程师可以四处浏览并根据需要进行更改。这些容器在设定的时间段后过期,但他们希望保存其数据库更改以供将来的容器使用。

我正在研究是否有一种解决方案,我可以使用 Lambda、aws-cli 或其他一些实用程序在容器终止之前自动执行此过程。

我正在寻找一种可以采用 mysql 容器并从中创建新图像的解决方案。我看到了这个问题,这主要是我想要的: 如何从亚马逊上正在运行的容器创建新的 docker 映像?

但是您必须docker commit从 ECS 实例运行,并从那里执行登录和推送。似乎没有办法将提交的图像推送到 ECR,而无需登录aws ecr get-login --no-include-email并运行 docker 的输出以获取令牌。

我遇到的问题是,如果我们有多个 ECS 实例正在运行,那么将很难知道工程师正在从哪里运行容器、SSH 到该服务器并运行docker commitdocker tagaws ecr logindocker push命令。对我来说,这似乎有点 hacky 并且容易出错。

我每小时重建 MySQL 容器并将其重新推送到 ECR,以便它们具有最新的内容更新。为了启动容器,我结合使用 ecs-cli 和 aws-cli 来使用 docker-compose.yml 文件在 ECS 中创建任务。

是否有一些功能我可以使用新名称/标签将正在运行的容器提交到 ECR?

我正在研究的另一个选项是使用持久存储 (EBS/EFS) 启动 MySQL 容器,但我仍在尝试查看这是否可行,因为我必须以某种方式标记持久存储,以便仅在工程师启动时使用它就这样。本质上,我将拥有一个特定于持久卷的唯一 docker-compose.yml 文件,它会启动一个带有新 mysql 数据的新容器,或者使用现有的容器(如果存在),并给定一个特定的名称。

0 投票
1 回答
2093 浏览

amazon-web-services - boto3 无法从在 AWS 批处理中运行的 Docker 容器连接到 S3

我正在尝试将存储在 ECR 中的 Docker 容器作为 AWS 批处理作业启动。此容器的入口点 python 脚本尝试连接到 S3 并下载文件。我AmazonS3FullAccess在计算环境中为 AWSBatchServiceRole 附加了一个角色,我还AmazonS3FullAccess为计算资源附加了一个角色。

这是正在记录的以下错误:botocore.exceptions.ConnectTimeoutError: Connect timeout on endpoint URL: "https://s3.amazonaws.com/"

这些实例有可能在自定义 VPC 中启动,而不是在默认 VPC 中启动。我不确定这会有所不同,但也许这是问题的一部分。我没有适当的权限进行检查。我已经在同一个 VPC 中启动的 EC2 实例上测试了这个 Docker 映像,一切都按预期工作。

0 投票
1 回答
1266 浏览

docker - AWS 在 ECS 中使用 ECS 优化的 AMI 和 Docker 容器

我已经花费了大量时间来构建接下来要描述的那种部署设置。我浏览了大部分关于 ECS 的文档,并记录了一份详尽的学习资源列表。

但是,似乎我仍然错过了 AWS ECS 上的 Docker 这个难题的一些重要部分......

在开发中,我们使用 Docker Compose 将一组容器定义为本地全栈集群。它是在本地使用容器的非常方便的工具。

我们的目标是使用 Docker Compose 方法将此集群部署到 Amazon AWS ECS 中。

ECS 支持最高版本 3.0 的 Compose 文件格式。最值得注意的是,不支持使用本地文件作为构建上下文,因此必须引用图像。

我目前感到困惑的是:

官方文档指出,在 ECS 中运行的实例应安装并配置Amazon ECS 容器代理Docker daemonecs-init 。因此,对于他们推荐的基本图像:

Amazon ECS 优化的 AMI 预配置了这些要求和建议。我们建议您将 Amazon ECS 优化的 Amazon Linux 2 AMI 用于您的容器实例,除非您的应用程序需要特定操作系统或该 AMI 中尚不可用的 Docker 版本。

混淆点1:但是,我在官方文档中没有找到关于如何基于这些优化的 AMI 实际构建和运行 Docker 容器的示例……这里这里只有两个 Dockerfile 示例,它们都是从公共非 AMI 映像?

我找到了一些资源,比如这里来源)和此处,它们展示了如何使用 Packer 及其EC2 AMI Builder(EBS 支持)来构建基于这些 ECS 优化 AMI 的自定义 AMI。

我自己设置了这个过程,做了一些小的修改,它正在工作。我在 AWS EC2 AMI 下显示了我自己的自定义图像。

混淆点 2:但是,我似乎无法在我的 dockerfiles 或 docker compose 文件中引用这些 AMI 图像,因为它们没有存储在 ECR 中......我是否正确(或配置错误)?

Packer 确实有一个支持 ECR的 docker push 后处理器。但它不适用于 EC2 AMI Builder:

当然,我实际上不需要将基本 AMI 存储在 ECR 中……但我需要能够将其用作映像来构建我的自定义服务 Docker 映像,并将这些发布映像存储在 ECR 中。然后在 docker compose 文件中引用这些图像。

我知道转向其他自动化工具,如 Ansible、Terraform 或 AWS Code* 服务可能会让我超越这一点。但是我一直在尝试遵循官方文档并从各种来源收集信息,同时尝试将设置保持在最低限度,并且还没有完全理解我面临的问题。

困惑点 3:在 ECS 中使用 Amazon ECS 优化的 Amazon Linux 2 AMI 构建和运行 Docker 容器的推荐方法是什么?

我可能在这里错过了什么......?

0 投票
2 回答
2007 浏览

amazon-web-services - 如何为 SageMaker 拉取预先构建的 docker 映像?

我正在尝试为 SageMaker 提取预先构建的 docker 映像。我能够成功地docker login使用 ECR(我的 AWS 凭证)。当我尝试提取图像时,我得到了标准no basic auth credentials

也许我误解了……我认为那些 ECR URL 是公开的。

0 投票
2 回答
5326 浏览

amazon-web-services - “最新”标签在 ECS 任务定义和从 ECR 中提取的容器实例中如何工作?

latest在 ECR 任务定义中使用标签时遇到问题,其中image参数的值类似于XXXXXXXXXXXX.dkr.ecr.us-east-1.amazonaws.com/reponame/web:latest.

latest一旦在容器实例(注册到集群的 EC2 实例)上运行新的服务实例(任务),我希望此任务定义能够从 ECR 中提取带有标签的图像。

但是,在我的情况下,当我远程连接到容器实例并列出 docker 映像时,我可以看到它没有从 ECR 中提取最新版本的映像。

最新标签在当前版本之后有两个发布版本,因为我更新了任务定义以使用latest明确定义版本标签的标签实例,即:v1.05.

我在这个集群上只有一个容器实例。

我的过程中可能存在一些怪癖,但这个问题主要是关于latest在这种情况下应该如何表现?

我的docker镜像构建和打标签、ECR推送、ECS任务定义更新、ECS服务更新流程:

使用任务定义文件:

0 投票
0 回答
77 浏览

amazon-web-services - 互联网网关后面的公共子网中的 EC2 无法连接到 ECR

概括:

我在 VPC 的公共子网中有一个 EC2,其路由表中有一个 Internet 网关。它基于路由表连接良好。但是,我现在正尝试联系 ECR,这会导致“无法连接到端点 URL”消息。

我试过的:

  1. 我尝试使用允许用户的访问密钥 ID 和秘密访问密钥连接到 ECR。这不起作用并导致“无法连接消息”

  2. 然后,我尝试使用默认安全组为 ecr.api 和 ecr.dkr 创建一个端点,并将其连接到 EC2 所在的子网。我意识到这个端点不是通常的网关类型的端点(S3 等),而是一个接口。无论如何,这也不起作用并导致类似的消息

代码: $(aws ecr get-login --no-include-email --region ap-south-1)

错误:

无法连接到端点 URL:“ https://api.ecr.ap-south-1.amazonaws.com/

有人可以指出我正确的方向吗?