【发布时间】:2018-10-24 15:17:05
【问题描述】:
我有一个烧瓶应用程序,它根据用户调用运行一些事情。在这个应用程序中,我还有一个基本端点,它只返回一个字符串,可以帮助我查看应用程序是否正在运行。
@app.route("/hello")
def hello():
return "Hello World!"
现在我尝试使用来自官方 docker 网站的 this 教程对这个应用程序进行 docker 化。烧瓶应用程序侦听端口 5000,因此我在 Dockerfile 中添加了一个条目以公开端口 5000。
EXPOSE 5000
我在 Dockerfile 中用来运行应用程序的命令是
CMD ["python","model.py"]
model.py 文件包含根据用户输入调用其他函数的烧瓶代码。
现在,当我在容器化后运行我的应用程序时,我会在终端上看到烧瓶应用程序确实正在运行的所需输出。这是我用来运行应用程序的命令。
docker run -p 5000:5000 firstContainer
当我尝试使用请求 http://localhost:5000/hello 调用上面的基本 helloWorld 方法时,我收到一条错误消息,指出该站点不可用。这里的端口映射有什么我做错了吗?我该如何解决这个问题?
编辑:添加更多细节
所以我尝试进入容器查看发生了什么,我能够查看容器上可用的文件,它们看起来不错。当我尝试使用基本命令在容器中再次启动应用程序时
python model.py
它返回一个错误,指出该端口已在使用中。所以这应该意味着应用程序确实在监听端口。我还在容器内安装了 curl 以浏览 URL,当我在容器内运行它时,它返回了预期的字符串。我只是不明白我怎么能把它暴露给外界
编辑 2:
容器日志
* Serving Flask app "model" (lazy loading)
* Environment: production
WARNING: Do not use the development server in a production environment.
Use a production WSGI server instead.
* Debug mode: on
【问题讨论】:
-
尝试更明确:
docker run -p localhost:5000:5000 firstContainer。您还可以将特定的 IP 地址替换为localhost -
您是否可以通过127.0.0.1:5000/hello 访问您的应用程序以及 docker 是如何安装/运行的? $DOCKER_HOST 的值是多少?
-
@BMitch 从 docker 运行时我无法到达 127.0.0.1:5000/hello 但是当我在主机上启动应用程序时,我能够到达那个端点。关于 $DOCKER_HOST 的值,我必须检查一下。
-
如果您没有以编程方式将主机设置为
0.0.0.0,CMD 可能需要flask run --host=0.0.0.0才能公开服务器。开箱即用的ngnix后面还有一个运行flask的容器(google:“tiangolo flask docker”) -
@ReutSharabani 我必须将主机设置为 0.0.0.0 才能使其正常工作。我不知何故错过了你之前的评论。请随意提及作为答案,以便我接受。