使用 docker compose 在 Amazon ECS 上部署应用程序

Posted

技术标签:

【中文标题】使用 docker compose 在 Amazon ECS 上部署应用程序【英文标题】:Deploy Applications on Amazon ECS Using docker compose 【发布时间】:2021-06-03 12:47:54 【问题描述】:

我正在尝试将具有多个服务的 docker 容器部署到 ECS。我一直在关注这篇看起来很棒的文章:https://aws.amazon.com/blogs/containers/deploy-applications-on-amazon-ecs-using-docker-compose/

我可以让我的容器在本地运行,并且可以使用 AWS CLI 连接到 ECS 上下文;但是在我运行时文章中的基本示例中

docker compose up 

为了将镜像部署到 ECS,我收到错误:

pull access denied, repository does not exist or may require authorization: server message: insufficient_scope: authorization failed

似乎无法对此做出正面或反面。我的 docker 使用

登录到 ECS
aws ecr get-login-password --region region | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.region.amazonaws.com

我的 aws CLI 上的默认 IAM 用户具有 AmazonECS_FullAccess 以及“ecs:ListAccountSettings”和“cloudformation:ListStackResources”

我在这里读到:pull access denied repository does not exist or may require docker loginmikemaccana 的回答是,在 2020 年 11 月之后,您的 YAML 文件中可能需要进行身份验证以允许 AWS 从 hub.docker.io 中提取(例如,给 aws 您的 Docker 中心用户名和密码),但我无法让 'auth' 语法在我的 yaml 文件中工作。这是我在本地运行 tomcat 和 mariadb 的 YAML 文件:

version: "2"

services:

  database:
    build:
      context: ./tba-database
    image: tba-database
    # set default mysql root password, change as needed
    environment:
      MYSQL_ROOT_PASSWORD: password
    # Expose port 3306 to host. Not for the application but
    # handy to inspect the database from the host machine.
    ports:
      - "3306:3306" 
    restart: always

  webserver:
    build: 
      context: ./tba-webserver
    image: tba-webserver
    # mount point for application in tomcat
    volumes:
      - ./target/testPROJ:/usr/local/tomcat/webapps/ROOT
    links:
      - database:tba-database
    # open ports for tomcat and remote debugging
    ports:
      - "8080:8080" 
      - "8000:8000"
    restart: always

【问题讨论】:

【参考方案1】:

这里是博客的作者(感谢您的友好评论!)。我没有在构建方面玩太多,但我怀疑这里发生的情况是,当您运行 docker compose up 时,我们忽略了 build 阶段,只利用了 image 字段。接下来发生的是部署在 ECS/Fargate 上的容器尝试拉取映像 tba-database(部署似乎在抱怨,因为它不存在)。在ecs 上下文中使用docker compose up 之前,您需要额外的步骤将图像推送到GH 或ECR。

您可能还需要更改撰写版本(“2”非常旧)。

【讨论】:

我遇到了同样的问题,更新“图像”标签以指向远程图像(我刚刚推送到 ECR)工作。是否有原因它无法获取先前构建的 local 图像而不是需要远程图像?哦,等等,重新阅读你的答案很明显——启动的远程工作人员无法从你的本地机器上读取数据,所以在某些时候必须远程托管图像。 是的。确切地。正在启动的 Fargate 任务无法从您的笔记本电脑中提取。它需要位于任务可以访问的正确注册表中才能拉取。

以上是关于使用 docker compose 在 Amazon ECS 上部署应用程序的主要内容,如果未能解决你的问题,请参考以下文章

Docker:docker-compose 应用

Docker Compose 简单使用

docker compose

如何使用 docker-compose 在 docker 容器之间建立依赖关系 [重复]

docker-compose快速启动nginx

docker-compose基础