Tengo el siguiente problema: creé una aplicación NodeJS simple, donde hay un servidor de escucha en el puerto número 3000 . Definí algunas operaciones simples, como publicar, poner y leer. De todos modos, esta operación se realiza en una base de datos ejecutada como Docker Container, en el puerto número 5432 (postgres). En local, la aplicación funciona perfectamente. En cambio, si trato de dockerizar mi aplicación y ejecutarla:
FROM node:16 WORKDIR /app COPY package*.json /app RUN npm install COPY . /app CMD ["npm", "start"]Recibo el siguiente error:
original: Error: connect ECONNREFUSED 127.0.0.1:5432 at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1157:16) { errno: -111, code: 'ECONNREFUSED', syscall: 'connect', address: '127.0.0.1', port: 5432 } }Como si no fuera posible conectarse a la base de datos de postgres. ¿Por qué sucede esto? En local, puedo conectarme perfectamente a postgres, pero si ejecuto mi aplicación como un contenedor Docker, no puedo conectarme a postgres. ¡Gracias a todos!
Un contenedor tiene su propio host local, por lo que conectarse a localhost intentaría conectarse a una base de datos que se ejecuta dentro del contenedor y, como no tiene un servidor de base de datos que se ejecuta dentro del contenedor en localhost, no puede conectarse a él.
Puede conectarse a la base de datos que se ejecuta en el host usando host.docker.internal (para Mac/Windows) como nombre de host para referirse al host o iniciar el contenedor en la red del host (solo es posible en Linux) y luego debería funcionar.
Eche un vistazo a esta respuesta que entra en más detalles.