【问题标题】:docker returns err_empty_response when backend script takes too long当后端脚本花费太长时间时,docker返回err_empty_response
【发布时间】:2021-06-30 21:04:49
【问题描述】:

我正在 docker 中运行 FastAPI 应用程序。后端由多个 .py 脚本组成,用于训练多个机器学习模型。 FastAPI 返回结果。我有 docker 运行,一切都很好。但是,当建模需要更长的时间(通过使用多个超参数搜索循环)时,我会从我的 dockerized 应用程序中收到一个 err_empty_response。没有 docker 一切都很好。我想,这是一些超时问题。 我在 var/lib/docker/containers 的 config.v2.json 文件中添加了 "shutdown-timeout": 600 (我在 ubuntu 18.04 上),但这没有帮助。 这是我的 dockerfile:

FROM ubuntu:18.04
ARG DEBIAN_FRONTEND=noninteractive
ENV TZ=Europe/Moscow
RUN apt-get update && apt-get install -y curl wget gcc build-essential
#install python 3.9
RUN apt update
RUN apt install software-properties-common -y
RUN add-apt-repository ppa:deadsnakes/ppa
RUN apt install python3.9 -y
RUN ln -s /usr/bin/pip3 /usr/bin/pip
RUN ln -s /usr/bin/python3.9 /usr/bin/python
# install conda
RUN wget --quiet https://repo.anaconda.com/miniconda/Miniconda3-4.5.12-Linux-x86_64.sh -O ~/miniconda.sh && \
     /bin/bash ~/miniconda.sh -b -p /opt/conda
# create env with python 3.9
RUN /opt/conda/bin/conda create -y -n myenv python=3.9
RUN apt install -y -q build-essential python3-pip python3-dev
RUN pip3 install -U pip setuptools wheel
#install python environment/libraries
COPY requirements.txt /app/requirements.txt
ENV PATH=/opt/conda/envs/myenv/bin:$PATH
RUN pip3 install gunicorn uvloop httptools
RUN pip3 install -r /app/requirements.txt
RUN pip3 install -U kaleido
COPY projectfolder/ /projectfolder/
RUN ls -la /projectfolder/*
WORKDIR /projectfolder
EXPOSE 80
ENTRYPOINT /opt/conda/envs/myenv/bin/gunicorn \
  -b 0.0.0.0:80 \
  -w 4 \
  -k uvicorn.workers.UvicornWorker main:app \
  --chdir /projectfolder

这是一个示例 FastAPI 应用程序,仅用于演示。睡眠时间模仿超时:

from fastapi import FastAPI
import uvicorn
app = FastAPI()


@app.get("/")
async def root():
    time.sleep(150)
    return {"message": "Hello World from docker"}

if __name__ == "__main__":
    uvicorn.run(app)

我使用 docker 启动

sudo docker build -t myproject .
sudo docker run -it --rm --name my-running-app -p 80:80  myproject

并在 chrome 中打开 localhost。

所以问题是:如果这是问题(很可能),我该如何延长超时时间?

【问题讨论】:

    标签: docker fastapi


    【解决方案1】:

    好的,经过一番试验,我发现问题不在于 docker 超时,而在于 FastAPI。为了改变这一点,我修改了 dockerfile 中的入口点定义并设置了超时设置:

    ENTRYPOINT /opt/conda/envs/myenv/bin/gunicorn \
      -b 0.0.0.0:80 \
      -w 4 \
      --timeout 600 \
      -k uvicorn.workers.UvicornWorker main:app
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-07
      相关资源
      最近更新 更多