【问题标题】:How to communicate between containers in the same task in AWS ECS?如何在 AWS ECS 中的同一任务中的容器之间进行通信?
【发布时间】:2020-10-23 09:46:23
【问题描述】:

我有一个service-A,其任务定义为task-A,其中包括多个容器定义,例如nginxgrafana。这些容器如何相互通信?使用的网络是默认的桥接网络。

我已尝试curl grafana:3000,但容器无法解析名称。如果我在本地机器上尝试同样的方法,它会起作用。 我错过了什么?

这是我的任务定义:

resource "aws_ecs_task_definition" "this" {
  family = "x"
  execution_role_arn = "x"
  task_role_arn = "x"
  container_definitions = jsonencode(local.task_definition)
}

容器定义摘录:

locals {
  task_definition = [
    {
      name: "nginx",
      image: "nginx:latest",
      portMappings: [{
        containerPort: 80,
        hostPort: 0,
        protocol: "tcp"
      }],
      dependsOn: [{
        "containerName": "grafana",
        "condition": "START"
      }]
    },
    {
      name: "grafana",
      image: "grafana/grafana:latest",
      portMappings: [{
        containerPort : 3000,
        hostPort: 0,
        protocol: "tcp"
      }]
    }
  ]
}

【问题讨论】:

  • TBH:我对 AWS ECS 不是很熟悉。但是您听说过“Amazon ECS 服务发现”吗?通过阅读相关的博客文章,它似乎正是您所需要的:aws.amazon.com/de/blogs/aws/amazon-ecs-service-discovery
  • 是的,我听说过它,我的积压工作是使用 AWS 服务或 Consul 之类的工具实施适当的服务发现解决方案。我想要实现的是在单个 Docker 网络中运行 Docker 容器时已经获得的非常基本的功能。 AWS ECS 似乎不支持这种方式

标签: docker amazon-ecs


【解决方案1】:

dependsOn只在顺序启动容器时起作用,需要连接才能使容器之间的服务到服务级通信。

      dependsOn: [{
        "containerName": "grafana",
        "condition": "START"
      }]
      "links": [
        "grafana"
      ]

来自文档

links
Type: string array

Required: no

link参数允许容器相互通信 无需端口映射。仅支持网络模式 任务定义的设置为桥接。 name:internalName 构造 类似于 Docker 链接中的 name:alias。最多 255 个字母 (大写和小写)、数字、连字符和下划线是 允许

communicate-between-containers-in-the-same-task-in-aws-ecs

【讨论】:

    猜你喜欢
    • 2019-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-30
    • 2016-04-03
    • 1970-01-01
    • 2022-06-19
    • 2021-11-29
    相关资源
    最近更新 更多