Docker Container正在运行。但是页面无法在本地主机URL中工作(页面未发送任何数据)

时间:2019-10-10 19:00:20

标签: python docker flask dockerfile

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

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

图像被标记为dockerimage:latest,我用以下命令运行它:

docker run -it -p 8081:8081 dockerimage

然后使用docker container ls检查容器会显示:

0.0.0.0:8081->8081/tcp

1 个答案:

答案 0 :(得分:0)

您的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"

以上其中一项应该起作用。

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