python - Docker 容器正在运行。但页面在本地主机 URL 中不起作用(页面未发送任何数据)

标签 python docker flask dockerfile

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

docker container ls 显示我的容器在本地主机和端口号 8081 上运行

应用.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')

docker 文件

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 时,我在本地主机 url 上获得了所需的数据。有人可以指导我正确的方向吗?

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

docker run -it -p 8081:8081 dockerimage

并使用 docker container ls 检查容器显示:

0.0.0.0:8081->8081/tcp

最佳答案

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

  • 将基本图像更新为 python:3.7作为2.7将到达生命的尽头。
  • 删除 CMD ["flask", "run", "--host=0.0.0.0"]这是因为只有一个 CMD每个 dockerfile。
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"

以上之一应该有效。

如果第二个命令起作用,则主机配置有问题。

关于python - Docker 容器正在运行。但页面在本地主机 URL 中不起作用(页面未发送任何数据),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58329494/

相关文章:

python - 从python中的套接字读取二进制数据

docker - Docker将两个容器上的相同端口映射到主机上的不同端口

Docker 数据卷容器。我似乎无法备份

python - Requests/urllib 在 Flask/Apache/mod_wsgi/Windows 中不起作用

python - Swagger-ui 中参数的排序

python - Flask 重定向后的 Twilio MessagingResponse()

python - 如何将列表对象连接成字符串并用 "and"分隔最后 2 个对象

python - 使用 Excel 中的数据更新 (Oracle) 数据库

Python/Django TangoWithDjango 模型和数据库

docker - 如何快速更新正在运行的 docker-compose 容器