nor*_*rym 6 mqtt docker mosquitto docker-compose
我正在尝试通过 docker 和 docker-compose 运行本地 mosquitto 代理、发布者和订阅者设置,但发布者无法连接到代理。但是,通过 cli 连接到本地代理可以正常工作。运行以下设置时出现以下错误。
{ Error: connect ECONNREFUSED 127.0.0.1:1883
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1088:14)
errno: 'ECONNREFUSED',
code: 'ECONNREFUSED',
syscall: 'connect',
address: '127.0.0.1',
port: 1883 }
Run Code Online (Sandbox Code Playgroud)
本地 Docker 化设置:
docker-compose.yml:
version: "3.5"
services:
publisher:
hostname: publisher
container_name: publisher
build:
context: ./
dockerfile: dev.Dockerfile
command: npm start
networks:
- default
depends_on:
- broker
broker:
image: eclipse-mosquitto
hostname: mosquitto-broker
container_name: mosquitto-broker
networks:
- default
ports:
- "1883:1883"
networks:
default:
Run Code Online (Sandbox Code Playgroud)
dev.Dockerfile:
FROM node:11-alpine
RUN mkdir app
WORKDIR app
COPY package*.json ./
RUN npm ci
COPY ./src ./src
CMD npm start
Run Code Online (Sandbox Code Playgroud)
src/index.js:
const mqtt = require("mqtt");
const client = mqtt.connect("mqtt://localhost:1883");
client.on("connect", () => {
console.log("Start publishing...");
client.publish("testTopic", "test");
});
client.on("error", (error) => {
console.error(error);
});
Run Code Online (Sandbox Code Playgroud)
但是,如果我通过 mqtt-js cli 连接到 mosquitto 代理,它会按预期工作。例如
mqtt sub -t 'testTopic' -h 'localhost'和mqtt pub -t 'testTopic' -h 'localhost' -m 'from MQTT.js'。
我缺少什么?
小智 8
您的发布者容器和代理在两个不同的容器中运行,这意味着它们是两台不同的机器,每台机器都有自己的IP。
您无法使用 localhost:1883 从发布者容器调用代理服务,反之亦然,从代理到发布者容器
要访问代理容器,您必须调用容器 IP 或名称或服务名称
在你的情况下将mqtt.connect("mqtt://localhost:1883"); 值更改为mqtt.connect("mqtt://broker:1883");并尝试一下
| 归档时间: |
|
| 查看次数: |
22647 次 |
| 最近记录: |