docker-machine:无法从主机访问容器的Web服务器

我刚刚在我的Mac上用Docker-Toolbox安装Docker,使用自制软件: 安装 Docker 和自制软件

在创build和configuration容器与Rails,Postgres和启动docker – 组成一切看起来不错,但我不能从主机访问Web服务器。

输出

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

当我input谷歌浏览器的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应用程序的默认问候语页面。

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

我不熟悉Docker Compose,但是您发布的日志build议显示 8000端口。 因此,试试http://192.168.99.100:8000

(原因http://192.168.99.100:2376不起作用是因为这是Docker守护进程本身的地址和端口,它不是基于HTTP的。至于0.0.0.0 :这是你的web地址服务器在容器内部侦听并等同于其中的所有外部连接,但没有任何端口暴露,就没有办法了!

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

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

假设你有IP 172.17.0.2 。 你可以open http://172.17.0.2:8000

对于那些尝试localhost:4000作为教程说,但失败:

input这个

 $ 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

你可以find一个正确的地址来打电话给你的网页首先,通过以下方式findCONTAINER 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/