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

时间:2016-03-30 15:04:26

标签: docker

我刚使用自制软件在我的Mac上安装了Docker和Docker-Toolbox:install docker with homebrew

创建和配置带有Rails的Container,Postgres和启动docker-compose后,一切看起来都不错,但我无法从主机访问网络服务器。

的输出
$ docker-compose up

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

当我在谷歌浏览器中输入网址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应用程序的默认问候页面。

6 个答案:

答案 0 :(得分:22)

在这种情况下,

192.168.99.100是您的Docker主机的IP。您需要公开容器的端口,然后您就可以从外部世界连接到它。

我不熟悉Docker Compose,但是您发布的日志表明端口8000已暴露。因此,请尝试http://192.168.99.100:8000

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

答案 1 :(得分:14)

对于那些尝试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:4000ip:your_port

答案 2 :(得分:8)

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

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

让我们说你得到了IP 172.17.0.2。您可以运行open http://172.17.0.2:8000

答案 3 :(得分:8)

您可以通过这种方式找到正确的地址来呼叫您的网页 首先,通过以下方式找到CONTAINER 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/

答案 4 :(得分:0)

虽然此解决方案确实有效,但对我为什么以这种方式起作用并没有多大意义。来自该环境的IP地址甚至不在我的网络上(并且与我的IP v4静态IP地址或本地主机回送地址127.0.0.1不匹配);

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

标准(apache,码头,tomcat等)是转发到localhost(127.0.0.1),为什么docker也不能这样做?

答案 5 :(得分:0)

您可以分享您的docker-compose yaml吗?您需要在“ ports”条目下添加详细信息,以将端口从本地主机映射到容器

ports:
  - "4001:8001"
相关问题