我试图在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 .
有人能帮忙吗
嗯。。。每个Docker集装箱都有自己的内存空间&;网络边界。要使端口可用于客户端计算机(您的操作系统),您必须执行两个步骤:
暴露端口
通常,您可以将EXPOSE语句放在您已经完成的docker文件中
现在您需要执行步骤2
发布端口
使用下面的命令执行此操作(将主机(Docker Conainer)的端口映射到客户端计算机)
在您的情况下,它将是:
将imageName替换为Docker图像名
然后你可以做:
您使用它的方式是,flask只监听容器中的
127.0.0.1
。所以你能到达它的唯一方法是从同一个容器中对于正在使用的docker映像,不需要重写默认命令。从
Dockerfile
中删除这一行,它应该可以工作:CMD ["python3","main.py"," host=0.0.0.0"]
问题是您正在传递
host
参数,而不是使用flask二进制文件启动应用程序。因此,只需将Dockerfile中CMD的参数带到代码中即可。工作设置:Dockerfile:
和
main.py
您构建图像和打开容器的方式是正确的。为了使答案完整,我再次添加了以下步骤:
相关问题 更多 >
编程相关推荐