4

这是我的 compose.yml:

exp_db:
    image: <img>
    cpu_shares: 100
    mem_limit: 362144000
    volumes_from:
        - exp_db_data

exp_db_data:
    image: <img>
    cpu_shares: 100
    mem_limit: 362144000

exp_db 应该启动 postgres,exp_db_data 是 postgres 数据的卷。

当我想运行任务时:

ecs-cli compose --file compose.yml up

任务已停止(退出 0)。当我检查它停止的原因时,它说任务中的 Essential 容器已退出。我不确定卷容器是否应该不退出。在我的本地使用 docker-compose 时,一切都按预期工作。那么我做错了什么?我对 docker 还很陌生,所以我可能遗漏了一些东西或误解了一些基本原理。

谢谢

4

2 回答 2

1

我认为这就是这里发生的情况:如果容器的基本参数在任务定义中被标记为 true,并且该容器由于任何原因失败或停止,则作为任务一部分的所有其他容器都将停止。如果容器的基本参数被标记为 false,那么它的失败不会影响任务中的其余容器。如果省略此参数,则假定容器是必需的。[1]

所有任务必须至少有一个基本容器。

如果您的应用程序由多个容器组成,则应将用于共同目的的容器分组为组件,并将不同的组件分成多个任务定义。[2]

  1. 如果出现以下情况,您应该将多个容器放在同一个任务定义中:
  2. 容器共享一个共同的生命周期(也就是说,它们应该一起启动和终止)。
  3. 容器需要在相同的底层主机上运行(也就是说,一个容器在 localhost 端口上引用另一个容器)。
  4. 您希望您的容器共享资源。
  5. 您的容器共享数据量。

[1] https://docs.aws.amazon.com/AmazonECS/latest/userguide/task_definition_parameters.html

[2] https://docs.aws.amazon.com/AmazonECS/latest/userguide/application_architecture.html

于 2019-08-06T03:34:30.127 回答
0

当您在同一个任务定义中运行两个或多个服务时会发生这种情况,您可以更改该行为,但应该有一个容器可以让您的服务保持正常运行。

例如,如果您有两个容器,假设

  • 容器 A(必须启动并运行)
  • 容器 B(如果它关闭则忽略)

你认为 A 不需要 Container B,如果 B 宕机了你不想重启 A,你只需要设置

    "essential": false,

B容器任务定义中。

这对我有用ECS agent 1.36.2

于 2020-02-26T20:30:50.580 回答