【发布时间】:2021-01-24 13:38:08
【问题描述】:
我需要在 AWS ECS 上部署 this project(最好是 Fargate 或 EC2 最坏的情况)。 查看documentation,我尝试使用单个容器进行部署,它可以使用多个容器,但由于 ecs-cli 的限制,我无法直接从项目中使用 docker-compose.yml,因此我将 docker 图像上传到 ECR 并然后使用相应容器的摘要创建一个新的 docker-compose。
这里是原始docker-compose.yml 的链接。 这是我的 docker-compose 在将图像上传到 ECR 后现在的样子:
version: "3.0"
services:
postgres:
image: postgres:12
logging:
driver: awslogs
options:
awslogs-group: aws-ecs-docker-test
awslogs-region: ap-south-1
awslogs-stream-prefix: docker
db:
image: sha256:123123123123123213213213213
logging:
driver: awslogs
options:
awslogs-group: aws-ecs-docker-test
awslogs-region: ap-south-1
awslogs-stream-prefix: docker
traefik:
image: sha256:123123123123123213213213213
logging:
driver: awslogs
options:
awslogs-group: aws-ecs-docker-test
awslogs-region: ap-south-1
awslogs-stream-prefix: docker
queue:
image: sha256:123123123123123213213213213
logging:
driver: awslogs
options:
awslogs-group: aws-ecs-docker-test
awslogs-region: ap-south-1
awslogs-stream-prefix: docker
flower:
image: sha256:123123123123123213213213213
env_file:
- .env
logging:
driver: awslogs
options:
awslogs-group: aws-ecs-docker-test
awslogs-region: ap-south-1
awslogs-stream-prefix: docker
backend:
image: sha256:123123123123123213213213213
env_file:
- .env
environment:
- SERVER_NAME=${DOMAIN?Variable not set}
- SERVER_HOST=https://${DOMAIN?Variable not set}
- SMTP_HOST=${SMTP_HOST}
ports:
- "80:80"
logging:
driver: awslogs
options:
awslogs-group: aws-ecs-docker-test
awslogs-region: ap-south-1
awslogs-stream-prefix: docker
celeryworker:
image: sha256:123123123123123213213213213
env_file:
- .env
environment:
- SERVER_NAME=${DOMAIN?Variable not set}
- SERVER_HOST=https://${DOMAIN?Variable not set}
# Allow explicit env var override for tests
- SMTP_HOST=${SMTP_HOST?Variable not set}
logging:
driver: awslogs
options:
awslogs-group: aws-ecs-docker-test
awslogs-region: ap-south-1
awslogs-stream-prefix: docker
frontend:
image: sha256:123123123123123213213213213
logging:
driver: awslogs
options:
awslogs-group: aws-ecs-docker-test
awslogs-region: ap-south-1
awslogs-stream-prefix: docker
volumes:
app-db-data:
这里是 ecs-params.yml:
version: 1
task_definition:
task_execution_role: ecsTaskExecutionRole
ecs_network_mode: awsvpc
task_size:
mem_limit: 0.5GB
cpu_limit: 256
run_params:
network_configuration:
awsvpc_configuration:
subnets:
- subnet-123123123
- subnet-123123123
security_groups:
- sg-123123123
assign_public_ip: ENABLED
ecsTaskExecutionRole 拥有对 ECS、ECR 和 Cloudwatch 日志的所有访问权限。但是,每当我部署时,ecs 都会创建一些任务定义,然后超时:
Deployment has not completed: Running count has not changed for 5.00 minutes
即使我将超时时间延长到 30 分钟,它也不会改变输出。日志什么也没输出,所以我对潜在的问题一无所知。 我是 Devops 和 Docker 的新手,所以我不确定我到底错过了什么。
【问题讨论】:
-
任务无法启动的详细信息可能很难找到。检查这个问题的答案,看看它是否可以帮助您找到错误消息:stackoverflow.com/questions/56229059/…
-
嗨@MarkB 我遇到了这个问题,但任务的详细信息部分没有指定容器停止的原因。它只显示以下内容: Privileged - false 只读根文件系统 - false。如果我在集群上执行“服务 ps”,则 9 个容器中有 3 个发布此“已停止原因:CannotPullContainerError:来自守护进程的错误响应:sha256 的拉取访问被拒绝,存储库不存在或可能需要“docker login”:拒绝:请求访问资源被拒绝”
-
那些
sha256图片是什么?它们存在于 Dockerhub 中吗? -
这些图像在 AWS Elastic Container Registry 上。
-
嘿伙计,您最终使用了 ECS 吗?我有一个非常相似的用例(Flask + Celery + Flower),但我似乎无法让容器相互交谈。并且找不到使 .env 文件也能正常工作的方法......你有什么要分享的吗?谢谢!
标签: amazon-web-services docker docker-compose amazon-ecs amazon-ecr