我有一個由代理和多個客戶端組成的 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 中的自動名稱決議對我來說很有意義。
有沒有人遇到過同樣的問題?我該如何解決?
uj5u.com熱心網友回復:
根據檔案,同一 Fargate 任務中的容器可以127.0.0.1在容器各自的埠上相互尋址。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/521719.html
