Accessing any host os port from inside docker container

Sam A
2 min readMar 13, 2024

--

In the realm of containerization, developers often encounter scenarios where they need to interact with services running on their host machine from within a Docker container. A common example is accessing a local web server running on port 3000 and testing its accessibility using cURL. In this article, we’ll explore how to achieve this using Docker and cURL, assuming a Node.js server is already running on the host machine.

Step 1: Ensure Node.js Server is Running

Before proceeding, ensure that your Node.js server is up and running on 127.0.0.1:3000 or localhost:3000. This server could be any application you're developing or a service you wish to test.

Step 2: Run Docker Container with BusyBox Image

To access the host machine’s services from within a Docker container, we’ll utilize the --network host option to share the host's network namespace. This allows the container to directly access services running on the host.

Run the following command to start a Docker container using the BusyBox image:

docker run --network host -it --rm busybox
  • --network host: Shares the network namespace with the host, allowing the container to access host services.
  • -it: Starts an interactive terminal session.
  • --rm: Automatically removes the container when it exits.

Step 3: Test Connectivity with cURL

Once inside the Docker container, you can use cURL to test connectivity to the Node.js server running on the host machine. Use the following command:bashCopy co

curl http://host.docker.internal:3000

The host.docker.internal address is a special DNS name provided by Docker that resolves to the host machine's IP address. This allows the container to access services running on the host.

Conclusion

In this article, we explored how to expose a local Node.js server running on the host machine’s port 3000 to a Docker container using BusyBox and cURL. By leveraging the --network host option and the host.docker.internal DNS name, we were able to seamlessly interact with the host's services from within the container. This approach is useful for testing, debugging, and integrating containerized applications with services running on the host machine.

--

--

Sam A

Senior DevOps Consultant, a tech enthusiast and cloud automation expert that helps companies improve efficiency by incorporating automation