无法连接到Docker for Windows中的ASP.Net站点

时间:2017-05-22 04:31:30

标签: docker docker-networking docker-windows

我很难从主机连接到在Docker上的Windows容器中运行的ASP.Net网站。我可以毫无问题地连接到在Linux容器中运行的网站。

我尝试连接到localhost和分配给容器的IP端口,但在这两种情况下我只是收到超时错误。

我已经尝试了几个ASP.Net示例,这些示例已经预先构建,并尝试构建我自己的自定义图像。在每种情况下,我都会得到相同的超时错误。我也试过卸载并重新安装docker,但这并没有改变任何东西。

我正在运行Windows 10 Pro和Docker Community Edition版本17.03.1-ce-win12(12058)

2 个答案:

答案 0 :(得分:0)

最终,我能够使用Microsoft Vitualization清理脚本的自定义旧版本完全重置我的容器网络。 https://github.com/Microsoft/Virtualization-Documentation/tree/live/windows-server-container-tools/CleanupContainerHostNetworking这会重置我的容器网络,现在一切正常。

答案 1 :(得分:0)

摘要:

  • 当使用容器的Dockerfile中的EXPOSE指令定义容器的已发布端口时,-P参数必须与{{1}一起使用}命令以激活"那些暴露的端口。
  • Windows容器主机无法使用docker runlocalhost或其外部主机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上可用。然后您可以继续通过浏览器查看应用程序。要做到这一点,你有两个选择:

  1. 您可以使用容器IP和端口

    从容器主机访问该应用程序

    使用 C:\> docker run -P web_app 查找容器IP,然后查找与容器对应的端点/ IP地址。

    您还可以通过运行docker network inspect nat为容器IP提供资金,其中docker exec <CONTAINER ID> ipconfig是容器的ID。

    您可以通过在容器主机上运行<CONTAINER ID>来获取容器的ID和容器的公开端口。

  2. 您可以使用容器主机IP和主机端口从其他主机访问该应用

    您可以使用docker ps找到主机的IP地址。

    通过从主机运行ipconfig,您可以识别应用程序所在的主机端口。然后,在docker ps下,您会看到PORTS形式的映射。在此映射0.0.0.0:<HOST PORT>-><CONTAINER PORT>/TCP中,是您的应用在主机上可用的端口。

    获得容器主机的IP地址以及主机上可用的应用程序端口后,您可以使用该信息从单独主机上的浏览器访问您的应用程序

    注意:今天您无法通过这种方式从自己的主机访问容器 - 目前Windows容器主机无法访问正在运行的容器,无论<HOST PORT>,{{ 1}}或使用主机IP地址。