Docker compose 不会推送到 ECR

Docker compose won't push to ECR

我正在尝试设置部署,其中 docker compose up 命令将构建必要的图像,将它们推送到 ECR 并在 ECS 上启动所有内容。

到目前为止我做了什么。

  1. 已创建并切换到 aws 上下文:
docker context create ecs aws
docker context use aws
  1. 已创建 docker-compose.yml 文件:
version: '3.9'
services:
  frontend:
    build: ./frontend
    image: <my_aws_id>.dkr.ecr.<region>.amazonaws.com/frontend:latest
  backend:
    build: ./backend
    image: <my_aws_id>.dkr.ecr.<region>.amazonaws.com/backend:latest
  nginx:
    build: ./nginx
    image: <my_aws_id>.dkr.ecr.<region>.amazonaws.com/nginx:latest
    ports:
      - 80:80

看了一堆手册后,据我了解,命令docker compose up应该:

  1. 构建映像
  2. 将它们推送到 ECR
  3. 在 ECS 上创建集群和必要的任务
  4. 启动容器

相反,我遇到了错误,告诉我找不到这些图像。是的,我的 ECR 存储库是空的,但我希望 docker compose up 构建图像并将其推送到该存储库,而不仅仅是尝试从 ECR 获取它们。

我做错了什么?

该命令的目的是将服务 up 带到本地:

❯ docker-compose --help
  ...
  create             Create services
  push               Push service images
  start              Start services
  up                 Create and start containers

根据上下文,它还可以构建和拉取图像、创建或更新容器,当然还有启动服务,但它不会 push。如果您打算使用 docker-compose 来推送图像,我建议您手动 运行 构建和推送命令:

docker-compose build
docker-compose push

docker compose 中的 ecs 上下文不允许 build/push。从今天开始,您需要在上下文之间略微跳动以实现您想要做的事情。 This 是一个示例(嵌入到一个完全不同的项目中),它显示了该过程。

简而言之(为了后代):

export ACCOUNTNUMBER=<your account>
export MYREGION=<your region>
aws ecr get-login-password --region $MYREGION | docker login --password-stdin --username AWS $ECR_ECSWORKER_REPO_URI 
docker context use default
docker compose build
docker compose push
docker context use myecscontext
docker compose up

[上面假设 myecscontext 上下文已经用 docker context create ecs myecscontext]

创建了