amazon-ecs - 我将如何防止类似多米诺骨牌的 STOPPED 任务效果,这是一个好主意吗?
问题描述
ecs-cli compose --file <...> --project-name <...> --aws-profile <...> service up --create-log-groups --cluster <...> --launch-type FARGATE --region eu-west-1
当我使用某些任务启动 AWS ECS 任务定义修订版时,会从 aPENDING
变为RUNNING
state。问题是,如果一个容器进入某种STOPPED
状态,其余容器似乎会自动进入类似STOPPED
状态。有没有办法防止这种情况并且只有特定的容器独立崩溃,或者这是一种“反模式”?
让所有容器同时崩溃会使调试更加困难。
这是为 Dockerfile 提供的ecs-cli compose service up
:
services:
...-file-api:
environment:
...
image: ...
logging:
driver: awslogs
options:
awslogs-group: /ecs/log
awslogs-region: eu-west-1
awslogs-stream-prefix: ...-file-api
ports:
- 3054:3054
restart: always
...-frontend:
image: ...
logging:
driver: awslogs
options:
awslogs-group: /ecs/log
awslogs-region: eu-west-1
awslogs-stream-prefix: ...-frontend
ports:
- 80:80
restart: always
...-help-api:
environment:
...
image: ...
logging:
driver: awslogs
options:
awslogs-group: /ecs/log
awslogs-region: eu-west-1
awslogs-stream-prefix: ...-help-api
ports:
- 3059:3059
restart: always
...-login-api:
environment:
...
image: ...
logging:
driver: awslogs
options:
awslogs-group: /ecs/log
awslogs-region: eu-west-1
awslogs-stream-prefix: ...-login-api
ports:
- 3055:3055
restart: always
...-login-frontend:
image: ...
logging:
driver: awslogs
options:
awslogs-group: /ecs/log
awslogs-region: eu-west-1
awslogs-stream-prefix: ...-login-frontend
ports:
- 8080:8080
restart: always
...-mail-api:
environment:
...
image: ...
logging:
driver: awslogs
options:
awslogs-group: /ecs/log
awslogs-region: eu-west-1
awslogs-stream-prefix: ...-mail-api
ports:
- 3063:3063
restart: always
...-main-api:
environment:
...
image: ...
logging:
driver: awslogs
options:
awslogs-group: /ecs/log
awslogs-region: eu-west-1
awslogs-stream-prefix: ...-main-api
ports:
- 3053:3053
restart: always
...-mongo:
image: mongo:3.4.20-xenial
logging:
driver: awslogs
options:
awslogs-group: /ecs/log
awslogs-region: eu-west-1
awslogs-stream-prefix: ...-mongo
restart: always
...-plan-api:
environment:
...
image: ...
logging:
driver: awslogs
options:
awslogs-group: /ecs/log
awslogs-region: eu-west-1
awslogs-stream-prefix: ...-plan-api
ports:
- 3058:3058
restart: always
...-redis:
image: redis:4.0.14-alpine
logging:
driver: awslogs
options:
awslogs-group: /ecs/log
awslogs-region: eu-west-1
awslogs-stream-prefix: ...-redis
restart: always
version: '3'
作为“崩溃”的示例,...-main-api
服务会得到一个Error: Redis connection to localhost:6379 failed - connect ECONNREFUSED
在CloudWatch -> Logs -> Insights
. 例如...-mongo
,另一个服务的日志不可用,但它仍然适应STOPPED
状态。
预期:剩余的容器不应STOPPED
由于一个或多个其他容器停止而立即进入状态。STOPPED
只有当它们独立崩溃时,它们才应该进入一个状态。
目前:无论如何,所有容器显然都停止了。
解决方案
您可以尝试在任务定义中设置一个名为essential
as的参数false
,并且应该这样做。
基本的
类型:布尔值
必填:否
如果容器的基本参数被标记为 true,并且该容器因任何原因失败或停止,则作为任务一部分的所有其他容器都将停止。如果容器的基本参数被标记为 false,那么它的失败不会影响任务中的其余容器。如果省略此参数,则假定容器是必需的。
所有任务必须至少有一个基本容器。如果您的应用程序由多个容器组成,则应将用于共同目的的容器分组为组件,并将不同的组件分成多个任务定义。有关详细信息,请参阅应用程序架构。
“基本”:真|假
推荐阅读
- r - R中基于不规则间隔的生存数据表示
- json - 如何将 actix_web::web::Bytes 转换为 json?
- opencv - 有谁知道opencv中以下不推荐使用的函数的新名称?
- scala - 为什么 Scala Option.tapEach 返回 Iterable,而不是 Option?
- reactjs - 卸载组件时,其他组件中的钩子状态更改不是永久性的
- firebase - Firebase 动态链接:无法从短信点击
- react-native - NSMutableDictionary 无法转换为 ASAuthorizationAppleIDRequest
- swift - 如何在 tableView 单元格中实现收藏按钮?
- javascript - 如何选择所有父复选框?
- reactjs - 创建反应应用配置:指定现有的 index.html