Python 在docker容器中运行FastAPI

Python 在docker容器中运行FastAPI,python,docker,web-scraping,scrapy,fastapi,Python,Docker,Web Scraping,Scrapy,Fastapi,我正在Docker容器中部署一个web抓取微服务。我使用了Scrapy,并使用FastAPI公开了一个API调用,该调用将执行crawler命令 我以Ubuntu为基础创建了一个docker容器,并安装了所有必需的依赖项。然后我使用“execcontainer\u name bash”作为入口点来运行FastAPI服务器命令。但是如何将服务器作为后台作业运行 我尝试过从FastAPI docker图像构建(tiangolo/uvicorn gunicorn FastAPI:python3.6)但

我正在Docker容器中部署一个web抓取微服务。我使用了Scrapy,并使用FastAPI公开了一个API调用,该调用将执行crawler命令

我以Ubuntu为基础创建了一个docker容器,并安装了所有必需的依赖项。然后我使用“execcontainer\u name bash”作为入口点来运行FastAPI服务器命令。但是如何将服务器作为后台作业运行


我尝试过从FastAPI docker图像构建(tiangolo/uvicorn gunicorn FastAPI:python3.6)但它无法启动。

我使用了tiangolo/uvicorn gunicorn fastapi:python3.6映像并在其中安装了我的web抓取依赖项以及环境变量,并将工作目录更改为可以执行
抓取mybot
命令的文件夹

我之前在这个解决方案中遇到的问题是响应超时,因为我在API函数中使用
OS.popen('scrapy crawl mybot')
作为操作系统进程运行上述
scrapy crawl mybot
命令,记录输出,然后返回响应。我知道,这不是正确的方法——我会尝试将其作为后台工作运行;但现在这是一个解决办法

Dockerfile:

FROM tiangolo/uvicorn-gunicorn-fastapi:python3.6

# Install dependencies:
COPY requirements.txt .
RUN pip3 install -r requirements.txt

ENV POSTGRESQL_HOST=localhost
ENV POSTGRESQL_PORT=5432
ENV POSTGRESQL_DB=pg
ENV POSTGRESQL_USER=pg
ENV POSTGRESQL_PWD=pwd
ENV LC_ALL=C.UTF-8
ENV LANG=C.UTF-8

COPY ./app /app

WORKDIR "/app"
FastAPI端点:

@app.get("/scraper/crawlWeb")
async def scrapy_crawl_web(bot_name):
    current_time = datetime.datetime.now()
    start = current_time.timestamp()
    print("--START JOB at " + str(current_time))
    stream = os.popen(
        'scrapy crawl %s 2>&1 & echo "$! `date`" >> ./scrapy_pid.txt' % bot_name)
    output = stream.read()
    print(output)
    current_time = datetime.datetime.now()
    end = current_time.timestamp()
    print("--END JOB at " + str(current_time))

    return "Crawler job took %s minutes and closed at %s" % ((end-start)/60.00, str(current_time))

您看过关于使用docker部署的fast api文档了吗?进入bash后,需要使用gunicorn执行服务器。把你的docker文件放到你的问题中,没有它我们就帮不了你。另外,你提到现有的docker映像“无法启动”。你能写下你是如何或什么错误的吗?可能值得调试该部分。