docker - 本地MQTT mosquitto实例获得连接ECONNREFUSED 127.0.0.1:1883

标签 docker docker-compose mqtt mosquitto

我试图通过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 }
本地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:
dev.Dockerfile :
FROM node:11-alpine

RUN mkdir app
WORKDIR app

COPY package*.json ./

RUN npm ci

COPY ./src ./src

CMD npm start

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);
});
但是,如果我通过mqtt-js cli连接到mosquitto代理,它将按预期工作。例如。mqtt sub -t 'testTopic' -h 'localhost'mqtt pub -t 'testTopic' -h 'localhost' -m 'from MQTT.js'
我想念什么?

最佳答案

您的发布者容器和代理在两个不同的容器中运行,这意味着它们是两台不同的计算机,每台计算机都有自己的IP。
您不能使用localhost:1883从发布者容器中调用代理服务,反之亦然,从代理到发布者容器
要到达代理容器,您必须调用容器ip或名称或服务名称
在您的情况下,将mqtt.connect("mqtt://localhost:1883");的值更改为mqtt.connect("mqtt://broker:1883");并尝试一下

关于docker - 本地MQTT mosquitto实例获得连接ECONNREFUSED 127.0.0.1:1883,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63615089/

相关文章:

ios - 在 iOS 中连接 AWS IoT 代理

python - Kubernetes 集群中的 FileNotFoundError Python-Flask/Docker

docker - 注册表允许 docker 镜像重复 :tag?

docker compose 文件不工作 : replicas Additional property replicas is not allowed

c# - 不同网络中两个应用程序之间的命令

java - 无法接收已发布的消息到 mqtt paho 上的订阅主题

node.js - 使用 docker-compose 在 Docker 容器中锁定 package.json 文件

docker - 使用 docker-compose 的 minio kes 和 Hashicorp 保险库

django - 使用docker-compose时Django无法找到数据库

java - Docker&Java : building doesn't reflect the new files