【发布时间】: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