【问题标题】:Web application using Python3 not working when Dockerized使用 Python3 的 Web 应用程序在 Dockerized 时无法正常工作
【发布时间】:2021-05-30 06:12:47
【问题描述】:

HelloWorld-1.py

​​>
app = Flask(__name__)
@app.route('/')
def printHelloWorld():
    print("+++++++++++++++++++++")
    print("+ HELLO WORLD-1 +")
    print("+++++++++++++++++++++")
    return '<h1>Bishwajit</h1>'
    # return '<h1>Hello %s!<h1>' %name

if name == '__main__':
    app.run(debug='true')

Dockerfile

FROM python:3
ADD HelloWorld-1.py /HelloWorld-1.py
RUN pip install flask
EXPOSE 80
CMD [ "python", "/HelloWorld-1.py"]

使用以下命令构建 docker

docker build -t helloworld .

使用以下命令运行 docker 映像

docker run -d --name helloworld -p 80:80 helloworld

当我运行以下命令时

docker ps -a

我得到以下输出

CONTAINER ID  IMAGE      COMMAND               CREATED             STATUS             PORTS               NAMES

cebfe8a22493 helloworld "python /home/HelloW…" 2 minutes ago Up 2 minutes (unhealthy) 0.0.0.0:80->80/tcp helloworld

如果我在浏览器中点击(127.0.0.1:5000),它不会给出响应, 但是当我单独运行python文件时,它在浏览器中运行正常。

【问题讨论】:

  • 您正在尝试使用127.0.0.1:5000 进行访问,所以-p 参数不应该是-p 5000:80吗?
  • 我也尝试更改端口,但没有成功。我的 docker 文件是否正确?
  • 我也试过了。在 Dockerfile 中....有 EXPOSE 80,是否应该更改。
  • @programandoconro 终于成功了。我改变了一些东西,比如 `` app.run(debug='true', port='5000', host='0.0.0.0') ``` ``` docker run -p 5000:5000 helloworld ```

标签: python-3.x docker flask


【解决方案1】:

我重现了您的问题,主要有四个问题:

  1. 不导入flask
  2. 使用name 代替__name__
  3. 未分配正确的端口。
  4. 未分配主机。

这就是你的HelloWorld-1.py 的样子:

from flask import Flask
app = Flask(__name__)
@app.route('/')
def printHelloWorld():
    print("+++++++++++++++++++++")
    print("+ HELLO WORLD-1 +")
    print("+++++++++++++++++++++")
    return '<h1>Bishwajit</h1>'
    # return '<h1>Hello %s!<h1>' %name

if __name__ == '__main__':
    app.run(host='0.0.0.0')

这就是你Dockerfile 的样子:

FROM python:3
ADD HelloWorld-1.py .
RUN pip install flask
CMD [ "python", "/HelloWorld-1.py"]

然后简单地构建并运行:

docker build . -t helloflask
docker run -dit -p 5000:5000 helloflask

现在转到localhost:5000,它应该可以工作了。

另外:您实际上可以分配任何其他端口,例如 4444,然后转到localhost:4444

docker run -dit -p 4444:5000 helloflask

【讨论】:

  • 在 Dockerfile 中....有 EXPOSE 80,是否应该更改。
  • 是的。正确..如果我想公开一个端口,它需要先给出端口,然后在 Dockerfile 中公开它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-25
  • 1970-01-01
  • 1970-01-01
  • 2011-05-26
  • 1970-01-01
  • 2012-01-02
相关资源
最近更新 更多