[英]Getting ERROR: connect ECONNREFUSED 127.0.0.1:5432 in Github Actions
[英]Local MQTT mosquitto instance getting connect ECONNREFUSED 127.0.0.1:1883
我正在嘗試通過 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 }
本地 dockerized 設置:
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
源代碼/索引.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");
試一試
在您的 index.js 中,您應該將“localhost”更改為“broker”。 當在容器內時,“localhost”將解析為該特定容器,因此您應該始終使用服務名稱,而 docker 將負責路由到該特定服務。 此外,默認情況下,同一撰寫文件中的所有服務都添加到同一網絡中,因此無需指定。
所以基本上改變這個: const client = mqtt.connect("mqtt://localhost:1883");
對此: const client = mqtt.connect("mqtt://broker:1883");
publisher
和broker
運行在不同的容器中,這意味着它們具有不同的 IP。
當發布者嘗試在localhost:1883
訪問代理時,收到ECONNREFUSED
是正常的,因此代理不在同一個容器中。
此時應更換127.0.0.1
或localhost
與經紀人(的服務名broker
在這種情況下)。 服務名稱將被解析為代理容器的正確 IP。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.