2016-03-30 85 views
11

访问容器的web服务器我只是多克尔工具箱安装泊坞我的Mac上使用自制:install docker with homebrew泊坞窗机:无法从主机

创建和配置使用Rails,Postgres的Container,并开始坞窗,撰写后一切看起来不错,但我不能从主机访问网络服务器。

$ docker-compose up 

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

,当我在谷歌浏览器中键入URL http://0.0.0.0:8000/我得到

This site can’t be reached 

0.0.0.0 refused to connect. 
ERR_CONNECTION_REFUSED 

输出,所以我尝试

$ docker-machine env dummy 

与下面的输出:

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" 

当我尝试在Chrome http://192.168.99.100:2376我得到一个空白文件下载。为什么这样?我期望我的Rails应用程序的默认问候语页面。

+3

0.0 .0.0不是您的容器的IP地址 - “在0.0.0.0上侦听”意味着服务器将接受任何网络接口上的连接。见http://stackoverflow.com/questions/20778771/what-is-the-difference-between-0-0-0-0-127-0-0-1-and-localhost – Ben

回答

10

192.168.99.100是您的Docker主机的IP,在这种情况下。您需要公开容器的端口,然后才能从外部世界连接到它。

我对Docker Compose不熟悉,但是您发布的日志建议端口8000已公开。因此,请尝试http://192.168.99.100:8000

(原因http://192.168.99.100:2376不起作用的,因为这是码头工人守护进程本身,这是不是基于HTTP的地址和端口至于0.0.0.0:这是您的Web服务器上内监听的地址该容器等同于其中的所有外部连接,但是,没有任何端口暴露,就没有办法!)

+0

真棒谢谢! – StandardNerd

+0

精彩!!!!!! – Turtle

5

暴露端口后,您可以通过docker创建的内部IP地址访问Web应用程序。您可以使用容器的名称运行以下命令获取IP地址:

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

比方说,你得到了IP 172.17.0.2。您可以运行open http://172.17.0.2:8000

+2

这不会工作,因为他正在使用码头机运行码头工人。在Docker机器中创建的容器可通过主机的地址访问,而不是直接访问。 – Willa

+0

你说得对@willa。但在旧版本中,可以在添加路由后访问容器的私有IP,例如'sudo route -n add 172.17.0.0/16 $(docker-machine ip dev)'。 –

3

对于那些谁试图localhost:4000the tutorial说,但失败:

输入这个

$ docker-machine env 

和得到的结果类似

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" 

让您获得IP: 192.168.99.100

然后访问192.168.99.100:4000,为ip:your_port

1

你可以找到一个合适的地址,打电话给你的页面这样 首先,通过发现容器ID:

$ docker ps 

你会得到这样的信息:

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 

现在你知道端口:4000这样的地址应该是这样的:

http://192.168.99.100:4000/ 

但是,你可以仔细检查:

$ docker port 56dd4d582b08 

你会在这种情况下,得到以下信息:

4000/tcp -> 0.0.0.0:80 

现在,你可以尝试看看你的项目在

http://192.168.99.100:4000/