首页 > 解决方案 > 如何为在 Docker 容器中运行的 Flask 应用程序分配 IP

问题描述

我有一个简单的 Flask 应用程序,它只输出“Hello world”。flask run --host=127.0.0.23 --port=5001如果我在我的主机上做类似的事情,我可以在给定的主机名和端口上在我的浏览器上 ping 应用程序。

但是,如果我在 Docker 容器中运行这个应用程序时做同样的事情,即我 CMD flask run --host=127.0.0.23 --port=5001在我的 Dockerfile 中,我无法在我的主机浏览器上 ping 应用程序。

我知道app.run(host='0.0.0.0')在 Flask 应用程序中可以在localhost:5000我的主机上访问它。但我想知道我是否可以使用我自己分配的主机名访问该应用程序。

Flask 应用程序代码:

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World"

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

标签: docker

解决方案


您不会为您的应用程序“分配 ip”。您在主机上发布端口。也就是说,如果您的应用程序侦听5000容器内的端口,您可能会运行:

docker run -p 5000:5000 myimage ...

这将在您的主机端口5000上公开服务,这意味着在您的主机上运行的浏览器可以在localhost:5000or访问该服务<any_address_of_your_host>:5000,并且您网络上其他地方的浏览器也可以访问该服务<any_routeable_address_of_your_host>:5000

您的应用程序正在侦听的端口与您发布它的端口之间不需要任何关联。例如,对于上述情况,您可以改为运行:

docker run -p 80:5000 myimage ...

这会将您的应用程序暴露在主机上的端口 80 上。

阅读容器网络文档以获取更多信息。


推荐阅读