简体   繁体   中英

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

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.

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!)

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 .

You can find a right address to call your page this way First, find the CONTAINER ID by:

$ docker ps

You will get the information like this:

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                          NAMES
56dd4d582b08        abc01               "python app.py"     10 minutes ago      Up 11 minutes       80/tcp, 0.0.0.0:80->4000/tcp   flamboyant_bell

Now you know the port: 4000 (scroll right this row). So that the address should be like this:

http://192.168.99.100:4000/

However, you can double check:

$ docker port 56dd4d582b08

You will get in this case the following info:

4000/tcp -> 0.0.0.0:80

Now you can try to look you project at

http://192.168.99.100:4000/

After exposed the port, you can access the web app by the internal IP address created by docker. You can get the IP address using the container's name running the command:

docker inspect --format '{{ .NetworkSettings.IPAddress }}' 'container name here'

Let's say that you got the IP 172.17.0.2 . You can run open http://172.17.0.2:8000

While this solution does seem to work, it doesn't make much sense to me why it works this way. The ip address from the environment is not even on my network (and doesn't match with my ip v4 static ip address or the localhost loopback address 127.0.0.1);

$ docker-machine env
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.100:2376" 

The standard (apache, jetty, tomcat, etc) is to forward to localhost (127.0.0.1), why doesn't docker do this as well?

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM