无法通过主机访问Docker flask服务器容器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法通过主机访问Docker flask服务器容器相关的知识,希望对你有一定的参考价值。

不幸的是,网络上充斥着类似的问题,尽管它们都略有不同,有些涉及虚拟机。这是我的设置:

Mac osx 10.13.2 Docker 18.06.0-ce

我有一个非常简单的烧瓶安息服务器,运行时,我可以访问:http://127.0.0.1:8015/Outlier/username/100/我得到一个数值结果。

我已经使用上面的服务器应用程序设置了一个Docker镜像,并且需要使用flask,flask-restful和requests。当我运行该图像的容器时,我可以通过以下方式访问结果:

docker exec <container id> curl http://127.0.0.1:8015/Outlier/username/100/

问题是,当我通过chrome访问http://127.0.0.1:8015/Outlier/username/100/时,在主机上,我收到消息:

此页面无效127.0.0.1未发送任何数据。 ERR_EMPTY_RESPONSE

我知道容器在自己的ip:port上运行,而在主机上我必须正确地到达该位置。

docker ps <container id>

对于PORTS节目

0.0.0.0:8015->8015/TCP

我确保Dockerfile执行EXPOSE 8015:8015(因此主机和容器端口匹配)

docker inspect <container id> 

返回一组详细信息,包括一个为空的HostIp。根据这个有用的docker post,我必须看看'Gateway'设置,在我的例子中是172.17.0.1。无论如何,我已经通过chrome(和curl)在我的主机上尝试了以下功能而没有任何成功。我应该设置哪些其他设置?这不应该耗费时间......

http://localhost:8015/Outlier/username/100/ http://0.0.0.0:8015/Outlier/username/100/ http://127.0.0.1:8015/Outlier/username/100/ http:// <192.168.1.75我的主机ip通过ifconfig>:8015 / Outlier / username / 100 / http://172.17.0.1:8015/Outlier/username/100/ http:// <172.17.0.2这是根据docker inspect的IP地址>:8015 / Outlier / username / 100 /

有什么指针吗?

答案

如果你看看这个posting,你会看到开箱即用的Docker在OSX上无法正常工作,即如果你在容器中运行服务器应用程序,如果没有一些设置,你将无法在主机上访问它。由于我的Mac上空间不足并且在家里有一台Linux服务器,我通过在Linux(薄荷)中使用Docker解决了这个问题。该解决方案绝对不需要调整。 Linux中的Docker就像你(我)所期望的那样工作。

最后,这里是一个非常有用的一组安装后settings to consider when you run Docker on a Mac的链接。

以上是关于无法通过主机访问Docker flask服务器容器的主要内容,如果未能解决你的问题,请参考以下文章

如何解决docker宿主机无法访问容器中的服务

docker容器跑起mysql后,在宿主机无法进去mysql?

Docker 1.10 通过主机名访问容器

无法通过容器的 ip 和通过 http 暴露的端口访问 Docker 容器中的 Web 应用程序

07-docker端口映射与容器关联

无法使用nginx-proxy和dnsmasq在带有docker-compose的容器之间访问虚拟主机