Docker 容器无法连接到同一网络上另一个容器中运行的 Mosquitto MQTT 代理

问题描述 投票:0回答:1

我有两个程序应该通过 MQTT 进行通信。一个启动代理进程并侦听来自另一个的消息。当在本地运行时,这一切都有效,但在 Docker 内部却不起作用。 Docker compose 文件包含 mqtt 容器的端口:

ports:
 - "1883:1883"

我也尝试过这个,但没有任何区别:

expose:
- "1883"

所以它应该只是暴露的默认端口。在该容器中,mosquitto_pub 命令可以访问“localhost”的该端口,不会出现错误,但如果该命令使用分配给容器的 IP 地址或容器的名称而不是 localhost,则结果是“连接被拒绝”。其他容器不能使用 localhost 执行此类命令(至少在 Docker 中,这部分在直接在本地计算机上运行时有效),但如果它们使用 IP/容器名称,它们也会收到连接被拒绝的情况。

完全无效的主机名将导致不同的失败消息,所以我至少知道名称是正确的。此外,当在 Docker 容器中的本地主机(或 0.0.0.0)上启动时,mosquitto 代理会生成消息“错误:无法分配请求的地址”,但不会在外部启动,并且仍然继续运行,否则看起来不会出现错误。

编辑:mosquitto.conf 文件是默认的,无需修改。

docker mqtt mosquitto docker-networking
1个回答
0
投票

默认的 mosquitto 配置仅侦听

localhost
,因此无法从容器外部的任何内容进行连接

您需要创建一个名为

mosquitto.conf
的本地文件,其中包含以下内容:

listener 1883
allow_anonymous true

并将其安装在

/mosquitto/config/mosquitto.conf

© www.soinside.com 2019 - 2024. All rights reserved.