'Why can't I connect my application (docker) to the database? [duplicate]

I've the following problem: I created a simple NodeJS app, where there is a listening server on port number 3000. I definded some simple operations, like post, put and read. Anyway, this operation are performed into a database executed as Docker Container, on port number 5432 (postgres). In local, the application works perfectly. Instead, if I try to Dockerize my app and execute it:

FROM node:16
WORKDIR /app
COPY package*.json /app
RUN npm install
COPY . /app
CMD ["npm", "start"]

I receive the following 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
      }

}

As if it was not possible to connect to the postgres db. Why this happens? In local I perfectly can connect to postgres, but if I execute my app as a Docker Container, I can't connect to postgres. Thank you everybody!



Solution 1:[1]

A container has its own localhost so connecting to localhost would try to connect to a database running within the container and as you don't have a database server running within the container on localhost you can't connect to it.

You can connect to the database running on the host using host.docker.internal (for Mac/ Windows) as a hostname to refer to the host or start the container in the host network (only possible on Linux) and then it should work.

Have a look at this answer which goes into more details.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1