【问题标题】:Docker app cannot be accessed through opened ports无法通过打开的端口访问 Docker 应用程序
【发布时间】:2018-11-13 07:14:10
【问题描述】:

我在容器内有一个烧瓶应用程序。我用

运行这个容器
docker run -p 5000:5000 pyprojects_web

它会回复

 * Serving Flask app "debateit.py"
 * Environment: production
   WARNING: Do not use the development server in a production environment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

如果我跑了

docker container ls

我明白了

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
2221298e6e2c        pyprojects_web      "flask run"         12 minutes ago      Up 12 minutes       0.0.0.0:5000->5000/tcp   elated_joliot

如果我访问http://127.0.0.1:5000,我会得到:

This site can’t be reached
The web page at http://127.0.0.1:5000/ might be temporarily down or it may have moved permanently to a new web address.
ERR_SOCKET_NOT_CONNECTED

http://localhost:5000 给出了类似的响应。

通常的建议是使用 0.0.0.0 监听容器内的所有连接 - 但我已经这样做了。这是我的应用程序:

from app import app


if __name__ == "__main__":
    app.run(host="0.0.0.0")

如果我从容器内部卷曲,它会完美运行:

docker exec -it 2221298e6e2c curl http://localhost:5000

HTML 响应很长,我的服务器日志得到:

127.0.0.1 - - [04/Jun/2018 01:00:16] "GET / HTTP/1.1" 200 -

鉴于这些结果,并且我有一个“0.0.0.0”主机,还有什么可以尝试的?

谢谢。

【问题讨论】:

  • 您使用的是哪个操作系统?顺便说一句,这不是烧瓶问题,您的烧瓶设置看起来不错。
  • 下面的输出是什么:docker run -it --rm --net container:2221298e6e2c nicolaka/netshoot netstat -lnt
  • 您可能需要尝试访问192.168.99.100:5000192.168.64.8:5000,具体取决于哪个操作系统。
  • @chrisz 这是在 Ubuntu 上,但我在使用 Docker for Windows 的 Windows 上遇到了类似的问题。我的代码不是我完整的 Flask 应用程序,而是表明我使用的是 0.0.0.0。如果需要,我可以链接我的 github 存储库。这些 IP 都不适合我。
  • @BMitch 要求您运行的命令的输出证实了这一点:)

标签: docker networking flask


【解决方案1】:

因此,根据 cmets,很明显您实际上并未在 0.0.0.0 上运行,这可能是(注意容器的 command),因为您正在运行更新版本的烧瓶,我认为您必须通过flask run 的一些参数。

尝试flask run --host=0.0.0.0 作为容器中的命令,我认为这可能会达到您的预期:)

更多信息请访问Flask Docs

【讨论】:

  • 听起来你是对的。但是,我的初步测试证明这没有奏效。你能给我提供一些更具体的细节吗?如果我的 Dockerfile 中有一行带有“CMD [“flask”、“run”、“--host=0.0.0.0”]”,那应该是你提到的,对吧?这对我不起作用。 github 仓库位于:github.com/WarSame/DebateItPy/tree/flask
  • 我克隆了你的仓库,将最后一条指令更改为CMD ["flask", "run", "--host=0.0.0.0"] 重建了图像,效果很好。
  • 这绝对有效。非常感谢!现在运行它时说“在0.0.0.0:5000 上运行(按CTRL+C 退出)”,然后点击 localhost:5000 会给我 HTML,这是所需的行为!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-09
  • 1970-01-01
  • 1970-01-01
  • 2019-04-29
  • 2016-11-04
  • 2016-10-12
相关资源
最近更新 更多