我正试图在docker compose up
命令上设置部署,它将构建必要的映像,将它们推送到ECR并在ECS上启动所有内容。
我已经做了什么。
- 创建并切换到aws上下文:
docker context create ecs aws
docker context use aws
- 创建
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
应该:
- 构建图像/gh>
- 将它们推送到ECR
- 在ECS上创建集群和必要的任务 <
- 启动容器/gh>
相反,我有错误,告诉我这些图像没有找到。是的,我的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
上下文不允许构建/推送。从今天开始,你需要在不同的环境之间稍微跳跃一下,以达到你想要做的事情。这是一个示例(嵌入到一个完全不同的项目中),它显示了该过程。
简而言之(也是为了子孙后代):
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
创建]