docker - Docker Flask服务器容器无法通过主机访问

标签 docker server network-programming

不幸的是,网络上充满了类似的问题,尽管它们都稍有不同,并且其中有些涉及虚拟机。这是我的设置:

Mac OSX 10.13.2
Docker 18.06.0-CE

我有一台非常简单的 flask 静态服务器,运行时可以通过以下方式访问:
http://127.0.0.1:8015/Outlier/username/100/
我得到了一个数值结果。

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

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

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

This page isn’t working 127.0.0.1 didn’t send any data. 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,我必须查看“网关”设置,在我的情况下为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可以按您期望的那样工作。

最后,这是指向非常有用的一组post settings to consider when you run Docker on a Mac的链接。

关于docker - Docker Flask服务器容器无法通过主机访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52067957/

相关文章:

java - tomcat v8.0 无法在 ubuntu 上启动

ruby - 在 rackup 文件中设置服务器选项

Asp.Net 登录系统转换为专属门户

bash - docker 同步 : command not found

docker - docker 容器有哪些可能的状态?

mysql - NodeJS 服务器在使用 "Incorrect arguments"查询 MySQL 数据库时崩溃并抛出错误

c++ - 我们也可以从客户端套接字启用 keepalive 吗?

networking - 网络数据包中的哪些字段应该转换为网络字节序

selenium - 用于创建 Windows virt 并将文件下载到其中的 Docker Image

git - 如何在 docker-compose 远程 github 构建中指定提交