Connection Failure: connect ECONNREFUSED 127.0.0.1:5432 [ nocodb app to postgresql server]

I was trying to make connection my nocodb container to my postgresql container was getting an above error. I solve simply changing localhost to host.docker.internal:


The host.docker.internal DNS name serves as a bridge for network communication from a Docker container to the host machine. This special hostname is particularly useful during local development, enabling containers to access services on the host machine, such as databases, web servers, or other network services.

When configured within a Docker container or referenced in application code, host.docker.internal is resolved by Docker to the internal IP address of the host. This setup facilitates connections from the container to services running on the host as if they were part of the same local network.

Practical Application:

For example, if you have a PostgreSQL database running on your host machine and you wish to connect to it from within a Docker container, you could utilize host.docker.internal in your database connection string. In a Python application, this might look like:

DATABASE_URL = "postgresql://user:password@host.docker.internal:5432/mydatabase"

Here, the application inside the container would reach out to the PostgreSQL database on the host machine using host.docker.internal, with 5432 as the port and mydatabase as the database name.

Key Considerations:

  • Platform Compatibility: The availability of host.docker.internal is primarily on Docker for Mac, Docker for Windows, and Docker on WSL 2. Its support and behavior might vary across different platforms or Docker versions.

  • Security Implications: Granting containers the capability to interact with the host machine's network can introduce security vulnerabilities, particularly with untrusted containers. Ensure that such access is limited to trusted containers and explore Docker's network isolation features as needed.

  • Alternatives for Network Communication: In scenarios where host.docker.internal isn't supported or for more complex network requirements, other strategies may be employed, including custom network bridges, port forwarding, or using the external IP address of the host.

It's crucial to consult the Docker documentation relevant to your development environment for detailed and up-to-date guidance on using host.docker.internal and related networking capabilities.