![](/img/trans.png)
[英]Gunicorn is stuck on docker run command with a Flask Application
[英]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.