[英]docker-compose ECONNREFUSED for Postgres on nodeJS
[英]Postgres ECONNREFUSED on Docker Compose with NodeJS
當我嘗試從 docker 中的 NodeJS 應用程序通過 docker-compose 運行時連接到 docker 中的 postgres 服務器時收到 ECONNREFUSED。 但是我可以從我的主機連接。 這是我的 docker-compose.yml:
version: "2.4"
services:
api:
build:
context: .
target: dev
depends_on:
- postgres
ports:
- "8080:8080"
- "9229:9229"
networks:
- backend
environment:
- NODE_ENV=development
- PGHOST=postgres
- PGPASSWORD=12345678
- PGUSER=test
- PGDATABASE=test
- PGPORT=5433
volumes:
- .:/node/app
- /node/app/node_modules # Use empty volume to hide the node_modules from the host os
postgres:
image: postgres:11
restart: always
ports:
- "5433:5432"
networks:
- backend
volumes:
- db-data:/var/lib/postgresql/data
environment:
POSTGRES_PASSWORD: 12345678
POSTGRES_USER: test
POSTGRES_DB: test
networks:
backend:
volumes:
db-data:
nodeJS代碼:
const client = new Client({
user: process.env.PGUSER,
host: process.env.PGHOST,
database: process.env.PGDATABASE,
password: process.env.PGPASSWORD,
port: Number(process.env.PGPORT),
});
client.connect();
錯誤:
{ Error: connect ECONNREFUSED 172.22.0.2:5433
api_1 | at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1106:14)
api_1 | errno: 'ECONNREFUSED',
api_1 | code: 'ECONNREFUSED',
api_1 | syscall: 'connect',
api_1 | address: '172.22.0.2',
api_1 | port: 5433 }
同時,我可以毫無問題地從主機操作系統連接到數據庫服務器。 網絡有問題嗎?
編輯:在 nodejs 應用程序嘗試之前,dB 服務器已准備好接受連接(我也嘗試從 nodejs 應用程序中重試連接)。
不,網絡沒有錯。 只是因為您連接到錯誤的端口。
在 compose 網絡中,您的postgres
容器暴露了5432
端口,因此它只接受來自 compose 網絡中該端口的請求。 所以只需要將PGPORT=5433
更改為PGPORT=5432
。
您可以從主機操作系統訪問的原因是因為 docker-compose 映射了您的端口5433:5432
,因此從外部(主機操作系統)對5433
的所有請求都將傳遞到您的撰寫網絡內的5432
。
希望足夠清楚,以便您解決問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.