无法在localhost上访问容器的Web服务器:80

时间:2016-10-13 06:02:19

标签: docker docker-machine

我无法访问localhost:80上的容器网络服务器,但我可以访问127.0.0.1:80上的网络服务器。

我做错了什么?

我在Mac上安装了docker Version 1.12.2-rc1-beta27(build:12496)。

我使用命令docker run -d -p 80:80 training/webapp python app.py运行了一个容器。

容器具有以下属性

$docker ps -l
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                  NAMES
baaf4676e548        training/webapp     "python app.py"     22 minutes ago      Up 22 minutes       0.0.0.0:80->5000/tcp   big_volhard

我的理解是我应该可以从localhost:80访问该网站。

这不起作用。我收到错误消息

Could not get any response

我知道我正在使用Docker for Mac,因为我已经运行了命令env | grep DOCKER并且它没有返回任何输出。

首次更新:我的/etc/hosts看起来像是:

127.0.0.1       localhost
255.255.255.255 broadcasthost
::1             localhost

第二次更新:我还注意到,当我使用命令docker run -d -P training/webapp python app.py运行容器时,localhost:autoGeneratedPortNumber可以正常工作。

现在我不确定为什么两个命令(或多或少相同,唯一的区别在于指定一个端口号)具有不同的效果。

2 个答案:

答案 0 :(得分:0)

在您的服务器文件中, 而不是在127.0.0.1(localhost)上监听服务器,而在0.0.0.0上监听 这意味着您的服务器现在将监听任何可用的网络接口。 我犯了这个错误,但是更改后,效果很好。

答案 1 :(得分:0)

问题是IPv6。您的主机文件将localhost定义为IPv6地址(“ :: 1”是IPv6语法):

127.0.0.1       localhost
255.255.255.255 broadcasthost
::1             localhost

最有可能您位于一个IPv4网络上,其中IPv6请求被忽略。当您不指定接口时,Docker也可能默认在IPv4“ 0.0.0.0”通配符接口上发布。最简单的解决方案是在所有请求中坚持使用127.0.0.1。