Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

docker-machine: Can't access container's web server from host

Tags:

docker

I just installed Docker with Docker-Toolbox on my Mac using homebrew: install docker with homebrew

After creating and configuring a Container with Rails, Postgres and starting docker-compose up everything looks fine but i can't access the webserver from host.

The output of

$ docker-compose up  dummy_1    | I, [2016-03-30T14:55:53.130639 #6]  INFO -- : listening on addr=0.0.0.0:8000 fd=10 

When i type in Google Chrome the url http://0.0.0.0:8000/ i get

This site can’t be reached  0.0.0.0 refused to connect. ERR_CONNECTION_REFUSED 

So i tried

$ docker-machine env dummy 

with the following output:

export DOCKER_TLS_VERIFY="1" export DOCKER_HOST="tcp://192.168.99.100:2376" export DOCKER_CERT_PATH="/Users/choi/.docker/machine/machines/dummy" export DOCKER_MACHINE_NAME="dummy" 

When i try in Chrome http://192.168.99.100:2376 i get a blank file downloaded. Why is it so? I expect the default greeting page of my Rails App.

like image 578
StandardNerd Avatar asked Mar 30 '16 15:03

StandardNerd


People also ask

Can Docker reach localhost?

Docker provides a host network which lets containers share your host's networking stack. This approach means localhost inside a container resolves to the physical host, instead of the container itself. Now your container can reference localhost or 127.0. 0.1 directly.

How do I run Docker on port 8080?

The format of the --publish command is [host_port]:[container_port] . So if we wanted to expose port 8080 inside the container to port 3000 outside the container, we would pass 3000:8080 to the --publish flag. Start the container and expose port 8080 to port 8080 on the host.


2 Answers

192.168.99.100 is the IP of your Docker host, in this instance. You need to expose the port of your container and then you will be able to connect to it from the outside world.

I'm not familiar with Docker Compose, but the log you have posted suggests port 8000 is exposed. Try, therefore, http://192.168.99.100:8000.

(The reason http://192.168.99.100:2376 doesn't work is because that's the address and port of the Docker daemon itself, which isn't HTTP-based. As for 0.0.0.0: This is the address which your web server is listening on inside the container and equates to all external connections therein. However, without any ports exposed, there's no way in!)

like image 91
Xophmeister Avatar answered Sep 30 '22 17:09

Xophmeister


For those who tried localhost:4000 as the tutorial said but failed:

Input this:

$ docker-machine env 

and you will see something like:

export DOCKER_TLS_VERIFY="1" export DOCKER_HOST="tcp://192.168.99.100:2376" export DOCKER_CERT_PATH="/Users/choi/.docker/machine/machines/dummy" export DOCKER_MACHINE_NAME="dummy" 

So you get the IP: 192.168.99.100. Then just visit 192.168.99.100:4000, as ip:your_port.

like image 26
ch271828n Avatar answered Sep 30 '22 19:09

ch271828n