簡體   English   中英

gunicorn:找不到命令 Flask

[英]gunicorn: command not found Flask

我創建了一個 flask 應用程序,它使用此命令在本地運行良好gunicorn --workers 2 -b:5000 wsgi:app
現在,我嘗試在 docker 中運行相同的應用程序,我得到./gunicorn_starter.sh: line 3: gunicorn: command not found

我的 dockerfile:

FROM python:3.5

WORKDIR /app

COPY requirements.txt requirements.txt
RUN pip3 install -r requirements.txt --user

COPY . .
RUN chmod +x gunicorn_starter.sh
CMD ["./gunicorn_starter.sh" ]

gunicorn_starter.sh:

#!/bin/sh
source venv/bin/activate
gunicorn --workers 2 -b :5000 wsgi:app

wsgi.py:

from app import app

if __name__ == "__main__":
    app.run(debug=True)

文件結構:

flask_app
    >venv
    dockerfile
    gunicorn_starter.sh
    app.py
    wsgi.py
    requirements.txt

我在 require.nets.txt 文件中確實有 gunicorn。
我試過以下鏈接:
使用 venv 運行 docker 容器時找不到 gunicorn
安裝了 gunicorn 但它不在 venv/bin 文件夾中
Gunicorn 拋出錯誤 - 在 $PATH (Docker/Nginx) 上找不到可執行文件

我無法弄清楚為什么它不起作用,請幫助謝謝。

您顯示的內容中最重要的問題可能是您試圖將COPY目錄中主機的虛擬環境venv到 Docker 圖像中,但虛擬環境不可跨安裝移植。 因此,如果非標准source命令成功(如果/bin/sh實際上是 GNU bash),您可能會嘗試運行./venv/bin/gunicorn ,但它連接到容器內不存在的 Python 安裝。

您應該做的第一件事是編寫一個包含以下行的.dockerignore文件

venv

這將使您的基於主機的虛擬環境遠離映像構建。 這避免了 Python 不匹配的問題(甚至可能不是相同的操作系統),並且還會使docker build序列運行得更快。

Docker鏡像由於在Docker中,所以與其他Python安裝是隔離的,所以這里不需要虛擬環境。 一種標准方法是將軟件包安裝到“系統”Python 中,但在隔離映像中。 這意味着您不需要“激活”任何東西,您也可以省去 shell 腳本包裝器。

簡化的 Dockerfile 可能如下所示:

FROM python:3.5

WORKDIR /app

COPY requirements.txt ./              # can skip second filename
RUN pip3 install -r requirements.txt  # without --user

COPY . .

CMD gunicorn --workers 2 -b :5000 wsgi:app  # without shell-script wrapper

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM