我有一个flask应用程序,我正在尝试使用gunicorn在docker容器内运行它。
这是我的dockerfile
FROM python:3.6
WORKDIR /app
COPY ./requirements.txt /.requirements.txt
COPY . /app
# Install any needed packages specified in requirements.txt
RUN pip install -r requirements.txt
EXPOSE 8000
ENV FLASK_APP=<some_name>
ENV FLASK_ENV=development
CMD gunicorn -b :8000 -w 4 app:app
这就是我运行容器的方式-
docker run <name>
这就是我的测试方式-
curl -X POST http://172.17.0.2:8000/login -H 'cache-control: no-cache' -H 'content-type: application/json' -d '<SOME_PAYLOAD>'
curl: (7) Failed to connect to 172.17.0.2 port 8000: Operation timed out
据我所知
为什么此操作超时?
我也尝试过
CMD gunicorn -b 0.0.0.0:8000 -w 4 app:app
应该映射所有内容docker run -p 8000:8000 iterative
,这将强制在主机上的端口和容器之间进行映射。但无济于事。
在我的计算机上,该应用程序运行正常。
为什么它不能在docker容器中工作?
答案 0 :(得分:0)
您运行的Docker容器不正确
docker run -p 8080:8080 <the-name-of-your-image>
假设您的Dockerfile正在获取正确的文件,这应该可以解决问题
转到localhost:8080进行验证
答案 1 :(得分:0)
以我的经验,我发现以下方法在处理长颈瓶和长颈瓶时会更有效。我建议您按如下所示在Dockerfile中运行CMD:
CMD ["gunicorn", "-b", "0.0.0.0:8000", "<scriptname>:<runtimefunction>"]
在您的情况下,脚本名称很可能为“ app.py”,运行时函数为“ app”。只是为了说明我的建议:
在app.py
中
from flask import Flask
app = Flask(__name__)
@app.route("/")
def home():
return "Hello, World!"
if __name__ == "__main__":
app.run(debug=True)
还要添加工人,
CMD ["gunicorn", "-w", "5", "-b", "0.0.0.0:8000", "<scriptname>:<runtimefunction>"]
希望这会有所帮助。
答案 2 :(得分:0)
我也遇到了这个问题,当然 是我在工具链中的某个地方指定了另一个端口。
仔细检查您的端口!
app.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return "example"
Dockerfile
FROM foo-image:tag
...
RUN pip3 install gunicorn Flask
COPY *.py /app/
WORKDIR /app
EXPOSE 8001
CMD ["gunicorn", "-b", "0.0.0.0:8001", "--workers", "2", "app:app"]
运行命令
https://docs.docker.com/engine/reference/run/#expose-incoming-ports
docker run -p 8001:8001 "$CONTAINER_TAG"