【问题标题】:How to address another container in the same task definition in AWS ECS on Fargate?如何在 Fargate 上的 AWS ECS 中处理同一任务定义中的另一个容器?
【发布时间】:2022-10-28 03:10:34
【问题描述】:

我有一个由代理和多个客户端组成的 MQTT 应用程序。代理和每个客户端都在自己的容器中运行。在本地,我使用 Docker compose 来设置我的应用程序:

services:
  broker:
    image: mqtt-broker:latest
    container_name: broker
    ports:
      - "1883:1883"
    networks:
      - engine-net
  db:
    image: database-client:latest
    container_name: vehicle-engine-db
    networks:
      - engine-net
    restart: on-failure
networks:
  engine-net:
    external: false
    name: engine-net

我的客户端中的应用程序是用 C++ 编写的,并使用 Paho 库。我使用async_client 连接到代理。它需要两个参数,即:

mqtt::async_client cli(server_address, client_id);

因此,server_address 是 broker + 端口的 IP,client_id 是正在连接的客户端的“名称”。在使用 compose 文件时,我可以简单地使用文件中给出的服务名称来寻址网络中的其他容器(这里“broker:1883”可以解决问题)。我的容器工作正常,现在我想部署到 AWS Fargate。

在任务定义中,我添加了我的容器并为它们命名(与 Docker compose 文件中的服务名称相同。但是,由于部署失败,客户端似乎无法连接到代理。我我很确定它无法连接,因为它无法解析代理 IP。

AWS Fargate 使用网络模式 awsvpc - 据我了解 - 将任务的所有容器放入同一个 VPC 子网。因此,像 Docker compose 中的自动名称解析对我来说很有意义。

有没有人遇到过同样的问题?我该如何解决?

【问题讨论】:

    标签: amazon-web-services docker docker-compose aws-fargate ecs-taskdefinition


    【解决方案1】:

    根据the documentation,同一 Fargate 任务中的容器可以在容器各自端口的127.0.0.1 上相互寻址。

    【讨论】:

    • 感谢您的快速回答,我不得不承认我无法事先找到博客文章。我会考虑他们未来的问题!
    • 它也记录在这里:docs.aws.amazon.com/AmazonECS/latest/userguide/…“属于同一任务的容器也可以通过 localhost 接口进行通信。”
    猜你喜欢
    • 1970-01-01
    • 2019-04-08
    • 2018-10-13
    • 2022-11-03
    • 2021-03-30
    • 2022-11-12
    • 2019-06-08
    • 1970-01-01
    • 2019-07-03
    相关资源
    最近更新 更多