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

时间:2020-04-13 19:04:45

标签: 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","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 .

有人可以帮忙吗

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

嗯...每个Docker容器都有自己的内存空间和网络边界。要使端口可用于Client Machine(您的OS),您必须执行以下两个步骤:

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

公开端口

通常,您可以通过将 EXPOSE 语句放入已经完成的docker文件中来实现

现在,您需要执行步骤2

发布端口

使用“以下命令”来执行此操作(它将主机(Docker Conainer)的端口映射到客户端计算机。

docker run -p client_port:host_port imageName

在您的情况下,它将是:

docker run -p 5000:5000 imageName

用您的Docker映像名称替换imageName

然后您可以做:

localhost:5000

答案 2 :(得分:0)

烧瓶的使用方式仅是在容器内的127.0.0.1上监听。因此,唯一可以到达它的方法是在同一容器内。

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

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