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

我很难从主机连接到在Docker上的Windows容器中运行的ASP.Net网站。 我可以连接到运行在Linux容器中的网站,没有任何问题。

我已经尝试连接到本地主机和分配给容器的IP端口,但在这两种情况下,我只是得到一个超时错误。

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

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

概要:

  • 当使用容器的Dockerfile中的EXPOSE指令来定义已EXPOSE的容器端口时,必须将-P参数与docker docker run命令一起使用,以便“激活”那些暴露的端口。
  • Windows容器主机不能使用localhost 127.0.0.1或其外部主机IP地址访问正在运行的容器。 B.通过使用来自第二个主机B的A的IP地址,访问在给定主机上运行的容器A.也可以直接使用容器的IP地址。

完整解释:

所以确保正确的防火墙规则的创build有一些细微的差别,并且你的容器实际上可以在其发布的端口上访问。

例如,我假设你的ASP.Net容器化应用程序是由一个Dockerfile定义的容器图像定义的。 如果是这样的话,你可能使用Dockerfile的EXPOSE指令定义了映像/应用程序的发布端口。 在这种情况下,实际运行容器时,需要使用docker run命令的“-P”参数“激活”已发布的端口。

例如,如果您的容器映像是web_app ,并且该映像的Dockerfile包含该行,则EXPOSE 80 ,那么当您继续并运行该映像时,您需要执行以下操作:

  C:\> docker run -P web_app 

一旦容器运行,它应该在容器端口80上可用。然后,您可以继续通过浏览器查看应用程序。 要做到这一点,你有两个select:

  1. 您可以使用容器IP和端口从容器主机访问应用程序

    使用docker network inspect nat查找容器IP docker network inspect nat ,然后查找与您的容器相对应的端点/ IP地址。

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

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

  2. 您可以使用容器主机IP和主机端口从另一台主机访问该应用程序

    你可以使用ipconfigfind你的主机的IP地址。

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

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

    注:今天,您无法通过自己的主机以这种方式访问​​容器 – 尽pipe是使用localhost127.0.0.1还是使用了主机IP地址,但当前Windows容器主机无法访问正在运行的容器。