Docker Node.js pa ka konekte ak baz done PostgreSQL la
posée 2 days ago10 vuesht
Mwen gen yon aplikasyon Node.js k ap kouri andedan Docker. PostgreSQL ap kouri nan yon lòt container. Lè mwen lanse aplikasyon an deyò Docker, li konekte byen ak baz done a. Men lè mwen mete aplikasyon an nan Docker, koneksyon an echwe.
const { Client } = require("pg");
const client = new Client({ host: "localhost", port: 5432, user: "postgres", password: "password", database: "myapp" });
client.connect();
===================================== Mesaj Erè Error: connect ECONNREFUSED 127.0.0.1:5432
🤖 Diagnostic IA
par claude-sonnet-5 · 2 days ago
Généré par IA. Ce n'est pas une réponse — la communauté ci-dessous le confirme ou le corrige. Vérifiez toujours avant de vous y fier.
#1 Aplikasyon an ap eseye konekte sou 'localhost' andedan container li, men sa refere a container aplikasyon an menm, pa container PostgreSQL la — se yon erè klasik nan rezo Docker.
90% confianceEssayez ceci
Mete host la sou non service/container PostgreSQL la (pa egzanp 'postgres' si se sa non li nan docker-compose.yml oswa nan --network), epi tcheke ke tou de container yo sou menm rezo Docker ak: docker network inspect <network_name>#2 De container yo pa sou menm rezo Docker (docker network), sa fè non host/DNS resolution pa mache menm si ou chanje 'localhost'.
50% confianceEssayez ceci
Lanse: docker network ls epi docker inspect <container_id> pou konfime tou de container yo gen menm 'NetworkID', oswa itilize docker-compose ak yon 'networks:' definisyon komen.#3 Sèvè PostgreSQL la konfigire pou aksepte konsyon sèlman lokalman (postgresql.conf: listen_addresses='localhost' oswa pg_hba.conf pa gen antre pou rezo Docker a).
30% confianceEssayez ceci
Verifye postgresql.conf pou 'listen_addresses' epi pg_hba.conf pou wè si li aksepte koneksyon ki soti nan sub-rezo Docker a (pa egzanp 172.x.x.x/16).
1 réponse
Kòz pwoblèm nan
Erè ECONNREFUSED 127.0.0.1:5432 la vin sitou paske ou itilize host: "localhost" nan config pg la. Andedan yon container Docker, localhost refere a container aplikasyon an li menm, pa container PostgreSQL la — se poutèt sa li mache lè w lanse l deyò Docker, men li echwe lè l andedan.
Sa pou w tcheke/korije
- Chanje host la pou l pwente sou non service/container PostgreSQL la (non sa a Docker rezoud otomatikman si tou de container yo sou menm rezo Docker) :
const { Client } = require("pg");
const client = new Client({
host: "postgres", // ranplase ak non service/container PostgreSQL la nan docker-compose.yml
port: 5432,
user: "postgres",
password: "password",
database: "myapp"
});
client.connect();
- Asire w tou de container yo sou menm rezo Docker. Si w itilize
docker-compose, sa fèt otomatikman si yo nan menm fichyedocker-compose.ymlsannetworkssepare. Sinon, tcheke ak:
docker network ls
docker network inspect <network_name>
epi konfime tou de container gen menm NetworkID.
- Si sa toujou pa mache, verifye konfigirasyon PostgreSQL la limenm — se yon posibilite ki gen mwens chans men fasil tcheke:
postgresql.conf→listen_addressespa dwe limite sèlman alocalhost.pg_hba.conf→ dwe gen yon antre ki pèmèt koneksyon ki soti nan sub-rezo Docker a (pa egzanp172.x.x.x/16oswa0.0.0.0/0pou tès).
Rezime
Pi gwo chans (90%) se senp fè chanje localhost pou non service PostgreSQL la nan config Node.js la, epi konfime tou de container yo sou menm rezo Docker. Si sa pa rezoud pwoblèm nan, tcheke pg_hba.conf/listen_addresses PostgreSQL la.
(Diskisyon an poko gen kòmantè adisyonèl ki konfime ki solisyon egzat la te mache — sa a se baze sèlman sou dyagnostik inisyal la.)
Connectez-vous pour dire si ça a marché.
Sign in and verify your email to post an answer.