Python Docker容器在本地运行-未发送任何数据

Python Docker容器在本地运行-未发送任何数据,python,docker,Python,Docker,我试图在docker容器中运行一个基本的flask应用程序。docker构建工作正常,但当我尝试在本地进行测试时,我得到了 127.0.0.1未发送任何数据错误 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"

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

127.0.0.1未发送任何数据错误

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 .

有人能帮忙吗。

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

暴露端口 发布端口 暴露端口

通常,您可以通过在docker文件中放入EXPOSE语句来实现这一点,您已经这样做了

现在您需要执行步骤2

发布端口

使用下面的命令将主机Docker Conainer的端口映射到客户端计算机

docker run -p client_port:host_port imageName
在您的情况下,它将是:

docker run -p 5000:5000 imageName
用Docker图像名称替换imageName

然后你可以做:

localhost:5000

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

暴露端口 发布端口 暴露端口

通常,您可以通过在docker文件中放入EXPOSE语句来实现这一点,您已经这样做了

现在您需要执行步骤2

发布端口

使用下面的命令将主机Docker Conainer的端口映射到客户端计算机

docker run -p client_port:host_port imageName
在您的情况下,它将是:

docker run -p 5000:5000 imageName
用Docker图像名称替换imageName

然后你可以做:

localhost:5000

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

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


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

您使用它的方式是,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

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

# build the image
docker build --tag dockertestapp1 .

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

问题是您正在传递-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

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

# build the image
docker build --tag dockertestapp1 .

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

您还可以添加用于运行容器的命令吗?请确保使用-net=host选项运行容器,或者使用docker容器IP尝试并连接容器above@rdas我已经使用docker inspect获取IP,并尝试使用通过IP访问它,但这也失败扫描您还添加了用于运行的命令容器?请确保使用-net=host选项运行容器,或使用docker容器IP尝试并连接该容器above@rdas我使用docker inspect获取IP,并尝试使用通过IP访问它,但这也失败谢谢,我以前也尝试过,但我一直在使用运行容器时提供的http链接。这有没有一个原因不起作用,但使用localhost:5000就可以了?为此,您可以尝试docker run-p 0.0.0.0:5000:5000 imageName吗?您使用的是windows吗?谢谢,我以前也尝试过,但我一直在使用您运行容器时提供的http链接。这有没有一个原因不起作用,但使用localhost:5000就可以了?为此,您可以尝试docker run-p 0.0.0.0:5000:5000 imageName吗?你在用windows吗?