Linux VM内部的Docker无法连接到Web应用程序

我的设置如下:

Host: Win10 Guest: Ubuntu 15.10 (clean install, only docker and nodejs are added) Base image: https://hub.docker.com/r/microsoft/aspnet/ 1.0.0-beta8-coreclr 

在客户端内部,我安装了Docker并创build了映像(使用yeoman添加示例webapp到上面的映像中)。 当我在容器中运行映像时,我可以使用来自linux的容器IP(例如172.17.0.2)成功地ping容器IP。

 $sudo docker run -d -p 80:5000 --name web myapp $sudo docker inspect --format '{{ .NetworkSettings.IPAddress }}' "web" 172.17.0.2 $ping 172.17.0.2 PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data. 64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.060 ms 1 packets transmitted, 1 received, 0% packet loss, time 999ms $curl 172.17.0.2:80 curl: (7) Failed to connect to 172.17.0.2 port 80: Connection refused 

我也可以连接到容器并执行命令,如ping,但是从Linux机器(guest虚拟机,docker主机)我不能访问容器内托pipe的Web应用程序,如上所示。 我尝试了几种方法,如映射到主机IP地址等,但没有一个工作。 有没有人有想法从哪里开始? 问题来自Docker安装在VirtualBox机器内部吗?

先谢谢你。

编辑:这里是容器的日志:

 Could not open /etc/lsb_release. OS version will default to the empty string. Hosting environment: Production Now listening on: http://localhost:5000 Application started. Press Ctrl+C to shut down. 

你的命令告诉Docker实质上将来自Linux客户端的端口80的请求代理到容器的端口5000。 所以你试过的curl命令不起作用,因为你试图在容器的端口80上,而容器本身有一个监听端口5000的服务。

要直接连接到容器,可以使用(在Linux客户机上):

 curl 172.17.0.2:5000 

通过Linux客户机上的已发布端口(从您的主机)访问:

 curl (Linux guest IP) 

或者(来自Linux客人):

 curl localhost 

编辑:这也将certificate是有问题的:

 Now listening on: http://localhost:5000 

你会希望容器内的应用绑定到所有接口(0.0.0.0),以便监听容器分配的IP。 与localhost不能访问。

你可能会发现这个例子很有用:

https://github.com/aspnet/Home/blob/dev/samples/1.0.0-beta8/HelloWeb/project.json

此行指定应用程序绑定到端口5004上的所有接口(使用“*”):

 21 "kestrel": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.Kestrel --server.urls http://*:5004" 

你需要类似的configuration。