繁体   English   中英

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

[英]Cannot contact docker container on Windows host

tl; dr问题的摘要:

  • 应用程序在容器内成功启动,绑定到容器内的127.0.0.1:8080,并成功服务Web请求,但仅在容器内
  • docker ps -a确认端口8080已暴露
  • 当我请求http:// [Container IP address]:8080时,无法使用容器的实际IP地址从主机与应用程序进行通信
  • 主机正在运行Windows 10
  • Windows防火墙已完全禁用以进行故障排除

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

open Suave
[<EntryPoint>]
let main args =

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

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

为了对应用程序进行容器化,我已按照“对Docker进行.NET Core应用程序化 ”中的说明进行操作,该说明指导我像

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

我无法连接到http:// localhost:80http:// localhost:8080上的“网站”,这显然是运行Windows的Docker用户的常见问题。 但是,该解决方案似乎已为Internet上运行的所有其他Windows用户解决了此问题

docker inspect myapp

然后点击生成的IPAddress也不起作用。 我得到:

在此处输入图片说明

在Chrome中同时点击http://172.17.0.2:80http://172.17.0.2:8080都会使我“无法访问该网站”。

另外值得注意的是,当我跑步时

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地址,并通过运行来获取该IP地址。

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

对我来说,总是产生:

当我运行香草

码头工人检查myapp

结果JSON的结构与建议的查询不完全相同。 我得到一个节点,但没有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/

我的容器化应用需要侦听/绑定到0.0.0.0,而不是127.0.0.1。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM