使用 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 使用
登录到 ECSaws 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 上部署应用程序的主要内容,如果未能解决你的问题,请参考以下文章