Docker 获取连接的本地MQTT MOSQUITO实例127.0.0.1:1883
我正在尝试通过docker和docker compose运行本地MOSQUITO代理、发布者和订阅者设置,但发布者无法连接到代理。但是,通过cli连接到本地代理可以正常工作。 在安装程序下运行时出现以下错误Docker 获取连接的本地MQTT MOSQUITO实例127.0.0.1:1883,docker,docker-compose,mqtt,mosquitto,Docker,Docker Compose,Mqtt,Mosquitto,我正在尝试通过docker和docker compose运行本地MOSQUITO代理、发布者和订阅者设置,但发布者无法连接到代理。但是,通过cli连接到本地代理可以正常工作。 在安装程序下运行时出现以下错误 { Error: connect ECONNREFUSED 127.0.0.1:1883 at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1088:14) errno: 'ECONNREFUSED', code: 'E
{ 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 }
本地停靠设置:
docker-compose.yml:
开发文档:
src/index.js:
但是,如果我通过mqtt js cli连接到mosquitto代理,它将按预期工作。例如。
mqtt sub-t'testTopic'-h'localhost'和mqtt pub-t'testTopic'-h'localhost'-m'来自mqtt.js'
我缺少什么?发布者和代理在不同的容器中运行,这意味着它们有不同的IP
当发布者试图到达localhost:1883上的代理时,通常会收到一个EconRefused,因此代理不在同一个容器中
在这种情况下,您应该将127.0.0.1或localhost替换为brokerbroker的服务名称。服务名称将解析为代理容器的正确IP。发布者和代理在不同的容器中运行,这意味着它们具有不同的IP
当发布者试图到达localhost:1883上的代理时,通常会收到一个EconRefused,因此代理不在同一个容器中
在这种情况下,您应该将127.0.0.1或localhost替换为brokerbroker的服务名称。服务名称将解析为代理容器的正确IP。您的发布者容器和代理运行在两个不同的容器中,这意味着它们是两台不同的机器,每台机器都有自己的IP 您不能使用localhost:1883从发布者容器调用代理服务,反之亦然,从代理到发布者容器 要访问代理容器,您必须调用容器ip或名称或服务名称
在您的情况下,请更改mqtt.connectmqtt://localhost:1883; 值为mqtt.connectmqtt://broker:1883; 试一试您的发布者容器和代理运行在两个不同的容器中,这意味着它们是两台不同的机器,每台机器都有自己的ip 您不能使用localhost:1883从发布者容器调用代理服务,反之亦然,从代理到发布者容器 要访问代理容器,您必须调用容器ip或名称或服务名称
在您的情况下,请更改mqtt.connectmqtt://localhost:1883; 值为mqtt.connectmqtt://broker:1883; 在index.js中尝试一下,您应该将localhost更改为broker。在容器内时,localhost将解析为该特定容器,因此您应该始终使用服务名称,docker将负责路由到该特定服务。此外,默认情况下,同一组合文件中的所有服务都添加到同一网络,因此无需指定它 所以基本上改变这个:const client=mqtt.connectmqtt://localhost:1883;
为此:const client=mqtt.connectmqtt://broker:1883; 在index.js中,您应该将localhost更改为broker。在容器内时,localhost将解析为该特定容器,因此您应该始终使用服务名称,docker将负责路由到该特定服务。此外,默认情况下,同一组合文件中的所有服务都添加到同一网络,因此无需指定它 所以基本上改变这个:const client=mqtt.connectmqtt://localhost:1883;
为此:const client=mqtt.connectmqtt://broker:1883; 感谢网络配置的额外提示感谢网络配置的额外提示
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:
FROM node:11-alpine
RUN mkdir app
WORKDIR app
COPY package*.json ./
RUN npm ci
COPY ./src ./src
CMD npm start
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);
});