我正在使用VS2017 docker支持。 VS为我创建了DockerFile,当我构建docker-compose文件时,它会创建容器并在172.x.x.x IP地址上运行应用程序。但是我想在localhost上运行我的应用程序。
我做了很多事,但没有任何效果。关注docker docs作为首发和building microsoft sample app。第二个链接工作正常但我尝试第一个链接方法时得到HTTP错误404。
感谢任何帮助。
答案 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不会抱怨默认。
解决方案是:
转发到另一个端口要容易得多。
要确保可以连接到端口,请使用telnet命令,例如:
telnet localhost 5000
如果您立即获得一个空白窗口,则表示服务器已启动并在此端口上运行。如果您在一段时间后收到消息并超时,则表示没有人正在运行。您和这两者都使用它来检查空闲端口和确保您可以连接到您的容器Web应用程序。
PS 我在一周前遇到过这种情况,因为我试图为测试设置一个SQL Server容器。我已经运行了1个默认实例和2个命名实例,当我尝试创建容器时,docker
根本没有抱怨。我花了一些时间才意识到出了什么问题。