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

Can';无法连接到Docker for Windows中的ASP.Net站点,docker,docker-networking,docker-for-windows,Docker,Docker Networking,Docker For Windows,我很难从主机连接到运行在Docker上Windows容器中的ASP.Net网站。我可以毫无问题地连接到运行在Linux容器中的网站 我已尝试连接到localhost和分配给容器的IP端口,但在这两种情况下都出现超时错误 我已经尝试了几个ASP.Net示例,这些示例已经预先构建好,同时尝试构建自己的自定义映像。在每种情况下,我都会得到相同的超时错误。我也尝试过卸载和重新安装docker,但这并没有改变任何事情 我正在运行Windows 10 Pro和Docker Community Edition

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

我已尝试连接到localhost和分配给容器的IP端口,但在这两种情况下都出现超时错误

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


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

最终,我能够使用定制的旧版本的Microsoft虚拟化清理脚本完全重置容器网络。这将重置我的容器网络,现在一切都正常工作。

摘要:

  • 当使用容器docker文件中的
    EXPOSE
    指令定义容器的已发布端口时,
    -P
    参数必须与
    docker run
    命令一起使用,以便“激活”这些已发布的端口
  • Windows容器主机无法使用
    localhost
    127.0.0.1
    或其外部主机IP地址访问正在运行的容器。通过使用来自第二台主机B的a的IP地址访问在给定主机a上运行的容器。或者,您可以直接使用容器的IP地址
完整解释:

因此,在确保创建了正确的防火墙规则,并且容器在其发布的端口上实际上是可访问的方面存在一些细微差别

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

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

    C:\> docker run -P web_app
一旦容器运行,它应该在容器端口80上可用。然后,您可以继续通过浏览器查看应用程序。为此,您有两种选择:

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

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

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

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

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

    您可以使用
    ipconfig
    查找主机的IP地址

    通过从主机运行
    docker ps
    ,您可以识别应用程序的主机端口。然后,在
    PORTS
    下,您将看到表单
    0.0.0.0:->/TCP
    的映射。在此映射中,是应用程序在主机上可用的端口

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

    注意:现在,您无法从自己的主机以这种方式访问容器——目前,Windows容器主机无法访问它正在运行的容器,不管是使用了
    localhost
    127.0.0.1
    还是主机IP地址


  • 无法从Windows计算机连接到同一主机上的IP:端口,必须连接到内部IP。这是Windows上已知的错误。要验证它,请从外部机器连接到您的容器,它将与您的工作站和端口的IP一起工作。我已尝试连接到容器的内部IP,但它不工作。我通过使用:
    docker inspect--format'{{.NetworkSettings.Networks.nat.IPAddress}}我的容器名来获取IP
    它在容器本身内部本地工作吗?尝试调用WebRequestdirectl到本地主机。它在本地工作。Invoke WebRequest返回状态码200和预期的标题。禁用主机上的防火墙您所说的一切都是真的,但没有解决我遇到的问题。我无法ping,也无法连接到Windows容器中运行的任何容器的内部IP。此外,如果您连接到容器的内部IP地址,则不需要指定-P选项。我仍然认为在Docker for Windows中没有工作环回是完全疯狂的。它将Docker的价值从高到低,因为无法轻松设置本地开发环境。即使只是获取容器IP地址也是一件痛苦的事。感谢您的反馈——我们知道这是一个问题,在Windows核心网络团队中,我们正在积极努力在Windows上获得本地主机/环回支持。目前我无法提供具体的可用日期,但我们非常感谢诸如此类的评论,以确认生产这种支持仍然是我们团队的优先事项。