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