【问题标题】:Docker Container running.But page isnt working in localhost URL(Page didnt send any data)Docker 容器正在运行。但页面在 localhost URL 中不起作用(页面未发送任何数据)
【发布时间】:2020-02-08 06:53:47
【问题描述】:

我是 Docker 和 Python 的新手。我使用 Flask 创建了一个简单的 Python 应用程序。我想在 Docker 容器中运行它。Docker 容器显示它正在运行。但是当我访问 url 时,我得到了 localhost没有发送任何数据。

docker container ls 显示我的容器在 localhost 和端口号 8081 上运行

app.py

from flask import Flask, redirect, url_for, request



app = Flask(__name__)


 @app.route("/hello", methods=["GET","POST"])
 def hello():
     return "Hello World!"

 if __name__ == '__main__':
     app.run(debug=True, port=8081,host='0.0.0.0')

Dockerfile

FROM python:2.7

ADD app.py /

RUN pip install flask

EXPOSE 8081 

CMD ["flask", "run", "--host=0.0.0.0"]

CMD ["python", "app.py", "--host=0.0.0.0"]

当我在本地环境中运行相同的 app.py 时,我会在 localhost url 上获得所需的数据。有人可以指导我正确的方向吗?

图像被标记为dockerimage:latest,我运行它:

docker run -it -p 8081:8081 dockerimage

并检查带有docker container ls 的容器显示:

0.0.0.0:8081->8081/tcp

【问题讨论】:

  • 你是如何访问这个烧瓶端点的?你是如何运行容器的?
  • 运行容器时需要转发端口。例如docker run -p 8081:8081 mycontainer
  • 为什么会有三个运行命令?
  • 1.构建命令:docker build -t dockerimage:latest。 -f Dockerfile 2.运行命令:docker run -it -p 8081:8081 dockerimage 3.Docker容器ls返回0.0.0.0:8081->8081/tcp
  • 当你访问那个端点时,你在做什么?您是否通过http://localhost:8081/hello 连接到它?

标签: python docker flask dockerfile


【解决方案1】:

您的 Dockerfile 和 Flask 脚本中的一切似乎都很好,但我会建议两件事。

  • 将基本映像更新为 python:3.7,因为 2.7 将达到其生命周期的终点。
  • 删除 CMD ["flask", "run", "--host=0.0.0.0"] 这个因为每个 dockerfile 只有一个 CMD。
FROM python:3.7.4-alpine3.10 
RUN pip install flask
ADD app.py /
EXPOSE 8081 
CMD ["python", "app.py", "--host=0.0.0.0"]

现在运行容器

docker run -it --name my_app --rm -p 8081:8081 dockerimage

打开浏览器点击

http://localhost:8081/hello

或

docker exec -it my_app ash -c "apk add --no-cache curl && curl localhost:8081/hello"

以上其中一项应该可以工作。

如果您的第二个命令有效,那么主机配置有问题。

【讨论】:

  • 为什么用户将他们的基础镜像更改为 alpine 版本?如果他们的示例被大大简化(MCVE)并且他们依赖于诸如numpy之类的包,这将产生新的问题,例如需要在后台更新gcc和fortran
  • 我认为python更适合容器比其他图像小两到三倍的情况,但如果不能满足要求,他可以使用python:3.7。因为脚本真的很简单,而且适合阿尔卑斯山
  • 对于希望优化其容器工作流程的人,我同意。对于初学者,我会坚持使用原版图像以尽量减少复杂性
猜你喜欢
  • 2020-09-19
  • 2020-10-14
  • 1970-01-01
  • 1970-01-01
  • 2018-02-03
  • 2018-09-13
  • 2020-08-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多