localhost不工作​​的docker windows 10

时间:2017-10-30 07:32:55

标签: docker dockerfile docker-windows asp.net-docker-extensions

我正在使用VS2017 docker支持。 VS为我创建了DockerFile,当我构建docker-compose文件时,它会创建容器并在172.x.x.x IP地址上运行应用程序。但是我想在localhost上运行我的应用程序。

我做了很多事,但没有任何效果。关注docker docs作为首发和building microsoft sample app。第二个链接工作正常但我尝试第一个链接方法时得到HTTP错误404。

感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

为了访问Docker Docs上发布的示例,您指出它不起作用,请按照以下步骤操作,

1 - 列出所有正在运行的docker容器

docker ps -a

运行此命令后,您应该能够查看当前正在运行的所有docker容器,如果您已正确遵循docker docs示例,则应该看到其中列出名为webserver的容器。< / p>

2 - 获取运行webserver容器的IP地址。为此,请运行以下命令。

 docker inspect -f "{{ .NetworkSettings.Networks.nat.IPAddress }}" webserver

您现在应该获取webserver容器正在运行的IP地址,希望您熟悉此步骤,因为它甚至可以在您附带问题的构建Microsoft示例应用程序示例中使用。

访问运行上述命令后获得的IP地址,您应该看到所需的输出。

回答您的第一个问题(使用docker for windows中的localhost访问docker容器),在Windows主机中,由于默认NAT网络堆栈的限制,您无法使用localhost访问容器。访问此link可以获得有关此问题的更详细说明。似乎docker文档尚未更新,但此问题仅存在于Windows主机中。

此报告也存在问题 - 请按照 link 查看。

希望这可以帮助你。

修改

此问题的解决方案似乎将在未来的Windows版本中出现。然而,该版本出现了这种限制在Windows主机中可用。点击此链接 - &gt; https://github.com/MicrosoftDocs/Virtualization-Documentation/issues/181

答案 1 :(得分:2)

很可能另一个应用程序已在端口80上运行。您必须将您的网站转发到不同的端口,例如:

docker run -d -p 5000:80 --name myapp myasp

并将浏览器指向http://localhost:5000

启动容器时,通过-p选项指定哪些内部端口将作为主机上的端口公开。 -p 80:80将网站使用的内部端口80暴露给主机的端口80.

如果另一个应用程序已经在端口80上侦听,如IIS,另一个Web应用程序或任何工具,并且网络接口在80上运行,则Docker不会抱怨默认。

解决方案是:

  1. 确保在端口80或
  2. 上没有其他任何内容
  3. 转发到其他端口。
  4. 转发到另一个端口要容易得多。

    要确保可以连接到端口,请使用telnet命令,例如:

    telnet localhost 5000
    

    如果您立即获得一个空白窗口,则表示服务器已启动并在此端口上运行。如果您在一段时间后收到消息并超时,则表示没有人正在运行。您和这两者都使用它来检查空闲端口确保您可以连接到您的容器Web应用程序。

    PS 我在一周前遇到过这种情况,因为我试图为测试设置一个SQL Server容器。我已经运行了1个默认实例和2个命名实例,当我尝试创建容器时,docker根本没有抱怨。我花了一些时间才意识到出了什么问题。