无法联系 Windows 主机上的 docker 容器

Cannot contact docker container on Windows host

tl;dr 问题总结:

为了排除故障,我在 dockers 容器中创建了最简单的 运行 应用程序,一个像这样的 F# / Suave 应用程序:

open Suave
[<EntryPoint>]
let main args =

    startWebServer defaultConfig (Successful.OK "Hello World!")
    0

效果很好,当我在本地 运行 时返回一个简单的 "Hello World!"。

为了将应用程序容器化,我遵循了“Dockerize a .NET Core application”中的说明,它指示我 运行 容器,例如

$ docker run -d -p 8080:80 --name myapp aspnetapp

我无法连接到 http://localhost:80 nor http://localhost:8080 的 "website",这显然是 Docker 用户 运行 宁 Windows 的常见问题。 然而,解决方案似乎已经为互联网上的所有其他 Windows 用户解决了这个问题,运行ning

docker inspect myapp

然后点击生成的 IP 地址,也不起作用。 我得到:

在 Chrome 中同时击中 http://172.17.0.2:80 and http://172.17.0.2:8080 会得到 "Site can't be reached."

同样值得注意的是,当我 运行

docker logs myapp

唯一的一行是

[17:43:21 INF] Smooth! Suave listener started in 73.476ms with binding 127.0.0.1:8080

作为猜测,我也试过了

ipconfig

然后访问 Docker NAT 适配器的 IP 地址,但这也会导致站点无法访问。

更新:

另一个可能相关或不相关的观察:许多在线教程建议在 Windows 下您需要直接连接到容器的 IP 地址,并通过 [=105= 获取该 IP 地址]宁

docker inspect -f "{{ .NetworkSettings.Networks.nat.IPAddress }}" myapp

对我来说,总是会产生:

当我 运行 香草

docker 检查 myapp

生成的 JSON 与推荐查询的结构不完全相同。我得到一个 bridge 节点,但没有 nat 节点:

你的应用说它绑定到 localhost:8080,但你正在发布端口 80。停止容器,然后重新运行:

docker run -d -p 8080:8080 --name myapp aspnetapp

尝试在 docker 文件

中添加以下行
ENV ASPNETCORE_URLS http://+:80 
EXPOSE 80 

参考:https://www.sep.com/sep-blog/2017/02/20/hosting-asp-net-core-docker/

我的容器化应用程序需要 listen/bind 到 0.0.0.0 而不是 127.0.0.1。