我正在尝试在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 .
有人可以帮忙吗
答案 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),您必须执行以下两个步骤:
公开端口
通常,您可以通过将 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"]