How To Access a Service on Host From a Docker Container?

+4 votes

I am new to Docker, I want to run a service running in my host machine from a Docker Container using docker-compose setup file. I tried configuring docker-compose.yml file: 

version: '3' 

services: 

nginx: 

    container_name: cont 

    image: ubuntu 

    command: sleep 10000000 

    networks: 

        - host 

networks: 

    host: 

But was unable to do that. What changes am I supposed to do in the docker-compose.yml file.

Mar 26, 2018 in Docker by shubham
• 6,890 points
4,225 views
What was the output of this? Any errors?

4 answers to this question.

+1 vote

According to docker-compose documentation you should use network_mode: "host" statement.

Just add the below lines to your docker-compose.yml file:

version: '3' 
services: 
  nginx: 
    container_name: cont 
    image: ubuntu 
    command: sleep 10000000 
    network_mode: "host"

Hope this helps!

answered Mar 26, 2018 by Atul
• 10,240 points

edited Mar 26, 2018 by Atul
+1 vote

To access the service from inside the container you need the port that particular host is listening to as no matter where the service is running we need to access it through the host node. 

Get docker container's hostname

curl 172.17.45.2:8080

If you have a service running on some other port you can access it via 172.17.42.1:5432.

answered Oct 11, 2018 by lina
• 8,110 points
0 votes

This is one of the way for doing this. Have a fixed set of IPs for both host and the containers. Set up a docker network like this with a common IP address.

docker network create -d bridge --subnet 192.168.0.0/24 --gateway 192.168.0.1 dockernet

Now each container can connect to the host under the fixed IP 192.168.0.1.

You just need to make sure, that you connect all your containers to that “dockernet” network you just created. You can do that with the --net=dockernet option for docker run.

answered Oct 16, 2018 by Kalgi
• 40,440 points
+1 vote

Adding to kalgi's answer, You can also connect to the docker net using your docker-compose file. 

Add the following in your docker-compose file(you'll be connecting to a common IP address network called dockernet).

version: '2'
services:
    db:
        image: some/image
        networks:
            - dockernet
networks:
    dockernet:
        external: true
answered Oct 16, 2018 by lina
• 8,110 points

edited Oct 16, 2018 by lina
Can you please elaborate your explanation and probably give an example with a code snippet.

hey DeanWinchester. I hope this gives a better understanding, add the following in your docker-compose file(you'll be connecting to a common IP address network called dockernet).

version: '2'
services:
    db:
        image: some/image
        networks:
            - dockernet
networks:
    dockernet:
        external: true
@lina can you post that as an answer or edit your answer with this explanation and code snippet so that's clearer for others having the same doubt.
I've updated my answer Kalgi, Hope that's good enough.

Related Questions In Docker

0 votes
1 answer

How do I copy a file from docker container to host?

Here is a way which you can ...READ MORE

answered Aug 27, 2018 in Docker by Damon Salvatore
• 5,510 points
2,396 views
0 votes
1 answer

How to run a docker command from inside the container?

You must have come across the /var/run/docker.sock file, ...READ MORE

answered Jun 28, 2018 in Docker by Sophie may
• 9,530 points
324 views
0 votes
1 answer
0 votes
1 answer

Deploy Docker Containers from Docker Cloud

To solve this problem, I followed advice ...READ MORE

answered Sep 3, 2018 in AWS by Priyaj
• 56,520 points
152 views
0 votes
1 answer

Different file owner inside Docker container and in host machine

Here is what you can try. Since ...READ MORE

answered Jun 27, 2018 in Docker by Atul
• 10,240 points
187 views
0 votes
1 answer

Docker containers as Jenkins Slave build agents

When you encapsulate the stage inside a ...READ MORE

answered Jun 16, 2018 in Docker by Atul
• 10,240 points
644 views