访问运行在Docker容器中的Flask应用
我有一个Flask应用程序,当我在本地运行 python app.py
时没有任何错误。它显示 Running on http://127.0.0.1:5000
,如果我直接访问 http://127.0.0.1:5000
,一切都正常工作。app.py
的最后一行是 app.run(debug=True)
。
现在我想通过Docker来运行这个应用。在我的Dockerfile中,有一行是 EXPOSE 8501
。
然后我用 docker build -t testimage .
来构建镜像。
最后我执行 docker run -it --expose=8501 -p 8501:8501 testimage
,结果它又显示 Running on http://127.0.0.1:5000
。
我的问题是:我在浏览器中输入什么才能访问运行在Docker容器中的应用?
2 个回答
0
假设这是你的 Flask 服务器代码
@app.route("/")
def home():
response=f"Flask Server > Hello World : Flask in Docker. Current Time:{time.strftime('%B %d, %Y %I:%M:%S %p')}"
log_file(response)
return response
if __name__ == "__main__":
app.run(host="0.0.0.0",debug=True,port=5000)
所以 Flask 应用程序在 5000
端口运行。现在这是 Docker 文件
#run as main.py
CMD ["python","flask_server/app.py"]
现在假设你运行 docker run -it -p 5002:5000 image_name
,这条命令是把你电脑上的 5002
端口映射到 Docker 的 5000
端口。这样在浏览器里,你可以打开 http://127.0.0.1:5002/
来访问它。想了解更多信息,可以查看我的 CICD 仓库
0
你现在把8501端口暴露出来了,但你的flask应用还是在5000端口上运行。你应该要么在暴露的端口上启动应用(可以通过在app.run
里加port
参数来实现),要么在运行docker的时候暴露一个和应用运行的端口一致的其他端口。