【问题标题】:Amazon ECS two services, one exits, second one never startedAmazon ECS 两项服务,一项退出,一项从未启动
【发布时间】:2020-02-27 04:30:50
【问题描述】:

这是我的 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 很陌生,所以我可能遗漏了一些东西或误解了一些基本原理。

谢谢

【问题讨论】:

  • 可以分享一下ecs任务定义吗?
  • 遇到了同样的问题,如果解决了请告诉我
  • 老实说,我不记得了。最后,我决定只为应用程序提供一个容器,而其他一切都是外部的——通过 RDS 的数据库,通过亚马逊弹性的弹性搜索。我被告知要避免在生产环境中使用容器中的卷,所以我这样做了。

标签: amazon-ecs


【解决方案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

【讨论】:

    【解决方案2】:

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

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

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

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

        "essential": false,
    

    B 容器任务定义中。

    ECS agent 1.36.2 为我工作。

    【讨论】:

      猜你喜欢
      • 2019-11-03
      • 1970-01-01
      • 1970-01-01
      • 2019-12-14
      • 1970-01-01
      • 2012-03-23
      • 1970-01-01
      • 1970-01-01
      • 2021-05-30
      相关资源
      最近更新 更多