亚马逊ECS有两个服务,一个退出,第二个从未启动

时间:2016-02-23 21:24:01

标签: amazon-ecs

这是我的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时,按预期方式工作。那么我做错了什么? 我对码头工作者来说相当新,所以我可能会遗漏一些东西或者误解一些基本原理。

由于

2 个答案:

答案 0 :(得分:1)

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

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

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

  1. 在以下情况下,您应将多个容器放入相同的任务定义中:
  2. 容器具有共同的生命周期(也就是说,它们应该一起启动和终止)。
  3. 要求容器在同一基础主机上运行(即,一个容器在本地主机端口上引用另一个容器)。
  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

答案 1 :(得分:0)

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

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

  • 容器A(必须启动并运行)
  • 容器B(忽略其是否关闭)

您认为A不需要容器B,如果B断开,您不想重新启动A,则需要设置所有内容

    "essential": false,

B容器任务定义中。

ECS agent 1.36.2对我有用。