使用 docker compose 将 ECS 应用程序部署到 AWS

Deploying an ECS application to AWS using docker compose

我正在关注 AWS tutorial 使用 docker compose 部署 ECS 应用程序。

当我运行docker compose up时,我只收到消息docker UpdateInProgress User Initiated,但没有其他任何反应:

[+] Running 0/0
 - docker  UpdateInProgress User Initiated                                                                 0.0s

以前,这工作正常,所有 ECS 资源(集群、任务定义、服务、负载均衡器)都已创建。

出于某种原因,现在,这不再有效(尽管我没有更改我的 docker-compose.yml 文件)。

docker-compose.yml:

version: '3'

services:
  postgres:
    image: ${AWS_DOCKER_REGISTRY}/postgres
    networks:
      - my-network
    ports:
      - "5432:5432"
    volumes:
      - postgres:/data/postgres
    
  server:
    image: ${AWS_DOCKER_REGISTRY}/server
    networks:
      - my-network
    env_file:
    - .env
    ports:
      - "${PORT}:${PORT}"
    depends_on:
    - postgres
    entrypoint: "/server/run.sh"
    
  pgadmin:
    image: ${AWS_DOCKER_REGISTRY}/pgadmin
    networks:
      - my-network
    depends_on:
    - postgres
    volumes:
       - pgadmin:/root/.pgadmin
    ports:
      - "${PGADMIN_PORT:-5050}:${PGADMIN_PORT:-5050}"
    
networks:
  my-network:
    #driver: bridge
    
    
volumes:
    postgres:
    pgadmin:
    

我之前也切换到正确的Docker上下文(docker context use my-aws-context)。 我已经为 Windows 和 AWS CLI 更新到最新版本的 Docker Desktop。

有人遇到过类似的问题吗?

从消息来看,您似乎正在尝试组合一个已经存在(在 AWS 上)的堆栈,因此它正在尝试更新 CFN 堆栈。你能检查一下是否是这种情况吗?如果发生这种情况,您有几个选择:1) 删除 CFN 堆栈(在 AWS 中或使用 docker compose down)或 2) 使用标志 --project-name string 启动 docker compose up(其中string 是您选择的任意名称)。默认情况下,compose 将使用目录名称作为项目名称,因此如果您两次 compose up 它将尝试在同一个堆栈上工作。