node.js - error - ECONNREFUSED para Postgres en nodeJS con dockers
docker compose yml node js (1)
Su DATABASE_URL
refiere a 127.0.0.1
, que es el adaptador de bucle invertido (más here ). Esto significa "conectar conmigo mismo".
Al ejecutar ambas aplicaciones (sin usar Docker) en el mismo host, ambas son direccionables en el mismo adaptador (también conocido como localhost
).
Al ejecutar ambas aplicaciones en contenedores, no están en localhost como antes. En su lugar, debe apuntar el contenedor web
a la dirección IP del contenedor db
en el adaptador docker0
- que docker-compose
establece para usted.
Cambio:
DATABASE_URL: postgres://username:[email protected]:5432/mydatabase
a
DATABASE_URL: postgres://username:pgpassword@db:5432/mydatabase
Esto funciona gracias a los enlaces de Docker: el contenedor web
tiene un archivo ( /etc/hosts
) con una entrada de db
apunta a la IP en la que se encuentra el contenedor de db
. Este es el primer lugar donde un sistema (en este caso, el contenedor) se verá al intentar resolver los nombres de host.
Estoy creando una aplicación que se ejecuta en NodeJS usando postgresql. Estoy usando SequelizeJS como ORM. Para evitar usar el demonio real de Postgres y tener nodejs en mi propio dispositivo, estoy usando contenedores con Docker-Compose.
cuando ejecuto docker-compose up
inicia la base de datos pg
database system is ready to accept connections
y el servidor de nodejs. pero el servidor no puede conectarse a la base de datos.
Error: connect ECONNREFUSED 127.0.01:5432
Si trato de ejecutar el servidor sin usar contenedores (con nodejs reales y postgresd en mi máquina), funciona.
Pero quiero que funcione correctamente con contenedores. No entiendo lo que estoy haciendo mal.
Aquí está el archivo docker-compose.yml
web:
image: node
command: npm start
ports:
- "8000:4242"
links:
- db
working_dir: /src
environment:
SEQ_DB: mydatabase
SEQ_USER: username
SEQ_PW: pgpassword
PORT: 4242
DATABASE_URL: postgres://username:[email protected]:5432/mydatabase
volumes:
- ./:/src
db:
image: postgres
ports:
- "5432:5432"
environment:
POSTGRES_USER: username
POSTGRES_PASSWORD: pgpassword
¿Podría alguien ayudarme por favor?
(Alguien a quien le gusta docker :))