我很难从主机连接到在Docker上的Windows容器中运行的ASP.Net网站。我可以毫无问题地连接到在Linux容器中运行的网站。
我尝试连接到localhost和分配给容器的IP端口,但在这两种情况下我只是收到超时错误。
我已经尝试了几个ASP.Net示例,这些示例已经预先构建,并尝试构建我自己的自定义图像。在每种情况下,我都会得到相同的超时错误。我也试过卸载并重新安装docker,但这并没有改变任何东西。
我正在运行Windows 10 Pro和Docker Community Edition版本17.03.1-ce-win12(12058)
答案 0 :(得分:0)
最终,我能够使用Microsoft Vitualization清理脚本的自定义旧版本完全重置我的容器网络。 https://github.com/Microsoft/Virtualization-Documentation/tree/live/windows-server-container-tools/CleanupContainerHostNetworking这会重置我的容器网络,现在一切正常。
答案 1 :(得分:0)
摘要:
EXPOSE
指令定义容器的已发布端口时,-P
参数必须与{{1}一起使用}命令以激活"那些暴露的端口。 docker run
,localhost
或其外部主机IP地址访问正在运行的容器。通过使用来自第二个主机B的IP地址访问在给定主机A上运行的容器。或者,您可以直接使用容器的IP地址。 完整解释:
因此,确保创建适当的防火墙规则有一些细微差别,并且您的容器实际上可以在其已发布的端口上访问。
例如,我假设您的ASP.Net容器化应用程序是由容器映像定义的,该容器映像由Dockerfile定义。 如果是这样,您可能使用Dockerfile EXPOSE指令为图像/应用程序定义了已发布的端口。在这种情况下,当您实际运行容器时,您需要"激活&# 34;使用" -P"发布的端口127.0.0.1
命令的参数。
例如,如果您的容器图像是docker run
,并且该图像的Dockerfile包含行web_app
,那么当您继续运行该图像时,您需要执行以下操作:< / p>
EXPOSE 80
容器运行后,它应该在容器端口80上可用。然后您可以继续通过浏览器查看应用程序。要做到这一点,你有两个选择:
您可以使用容器IP和端口
从容器主机访问该应用程序使用 C:\> docker run -P web_app
查找容器IP,然后查找与容器对应的端点/ IP地址。
您还可以通过运行docker network inspect nat
为容器IP提供资金,其中docker exec <CONTAINER ID> ipconfig
是容器的ID。
您可以通过在容器主机上运行<CONTAINER ID>
来获取容器的ID和容器的公开端口。
您可以使用容器主机IP和主机端口从其他主机访问该应用
您可以使用docker ps
找到主机的IP地址。
通过从主机运行ipconfig
,您可以识别应用程序所在的主机端口。然后,在docker ps
下,您会看到PORTS
形式的映射。在此映射0.0.0.0:<HOST PORT>-><CONTAINER PORT>/TCP
中,是您的应用在主机上可用的端口。
获得容器主机的IP地址以及主机上可用的应用程序端口后,您可以使用该信息从单独主机上的浏览器访问您的应用程序 。
注意:今天您无法通过这种方式从自己的主机访问容器 - 目前Windows容器主机无法访问正在运行的容器,无论<HOST PORT>
,{{ 1}}或使用主机IP地址。