本地运行的Docker容器未发送任何数据

2024-05-18 17:51:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在docker容器中运行一个基本的flask应用程序。docker构建工作正常,但当我尝试在本地进行测试时,我得到了

127.0.0.1 didn't send any data error.

Dockerfile

FROM tiangolo/uwsgi-nginx-flask:python3.6-alpine3.7 

ENV LISTEN_PORT=5000
EXPOSE 5000

RUN pip install --upgrade pip

WORKDIR /app
ADD . /app

CMD ["python3","main.py","--host=0.0.0.0"]

main.py

import flask
from flask import Flask, request
import os

app = Flask(__name__)

@app.route('/')

def this_works():
  return "This works..."

if  __name__ == '__main__':
    app.run(debug=True)

运行我正在使用的容器的命令是:

docker run -it --name dockertestapp1 --rm -p 5000:5000 dockertestapp1

要生成的命令还有:

docker build --tag dockertestapp1 .

有人能帮忙吗


Tags: pipdockerrunnamepyimport命令app
3条回答

嗯。。。每个Docker集装箱都有自己的内存空间&;网络边界。要使端口可用于客户端计算机(您的操作系统),您必须执行两个步骤:

  1. 暴露端口
  2. 发布端口

暴露端口

通常,您可以将EXPOSE语句放在您已经完成的docker文件中

现在您需要执行步骤2

发布端口

使用下面的命令执行此操作(将主机(Docker Conainer)的端口映射到客户端计算机)

docker run -p client_port:host_port imageName

在您的情况下,它将是:

docker run -p 5000:5000 imageName

将imageName替换为Docker图像名

然后你可以做:

localhost:5000

您使用它的方式是,flask只监听容器中的127.0.0.1。所以你能到达它的唯一方法是从同一个容器中

对于正在使用的docker映像,不需要重写默认命令。从Dockerfile中删除这一行,它应该可以工作:

CMD ["python3","main.py"," host=0.0.0.0"]

问题是您正在传递 host参数,而不是使用flask二进制文件启动应用程序。因此,只需将Dockerfile中CMD的参数带到代码中即可。工作设置:

Dockerfile:

FROM tiangolo/uwsgi-nginx-flask:python3.6-alpine3.7 

ENV LISTEN_PORT=5000
EXPOSE 5000

RUN pip install  upgrade pip

WORKDIR /app
ADD . /app

CMD ["python3","main.py"]

main.py

import flask
from flask import Flask, request
import os

app = Flask(__name__)

@app.route('/')

def this_works():
  return "This works..."

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

您构建图像和打开容器的方式是正确的。为了使答案完整,我再次添加了以下步骤:

# build the image
docker build  tag dockertestapp1 .

# run the container
docker run -it  name dockertestapp1  rm -p 5000:5000 dockertestapp1

相关问题 更多 >

    热门问题