![](/img/trans.png)
[英]Running a Flask app within a Docker container results in “./boot.sh: 2: exec: gunicorn: not found”
[英]gunicorn not found when running a docker container with venv
我正在嘗試運行一個 Docker 容器,該容器抱怨錯誤消息: /bin/sh: gunicorn: not found
。 在沒有 Docker 的情況下本地啟動服務器工作正常。 並且構建圖像也可以正常工作。 我是 docker 新手,所以我不知道我的 Dockerfile 中是否有任何奇怪的東西。
我的 Dockerfile:
FROM python:3.7-alpine
RUN adduser -D teamreacher
WORKDIR /home/teamreacher
# copy and install dependencies
COPY ./requirements.txt requirements.txt
RUN python -m venv venv
RUN venv/bin/pip install --upgrade pip
RUN venv/bin/pip install -r requirements.txt
# copy the app
COPY . .
RUN chmod +x boot.sh
RUN chown -R teamreacher:teamreacher ./
USER teamreacher
# expose port and run server
EXPOSE 5000
RUN source venv/bin/activate
CMD gunicorn -b :5000 --access-logfile - --error-logfile - wsgi:app
還有我的 requirements.txt:
Flask==1.0.2
Flask-RESTful==0.3.6
Flask-SQLAlchemy==2.3.2
Flask-JWT==0.3.2
Flask-Cors==3.0.7
gunicorn==19.9.0
一個RUN
命令創建一個層,就像在一個新的 shell 中運行命令一樣。 完成后,“外殼”退出。 所以后面的任何命令都不會受到影響。
您可以添加一個 shell 腳本 (startup.sh),例如,
#!/bin/sh
source venv/bin/activate
gunicorn -b :5000 --access-logfile - --error-logfile - wsgi:app
然后CMD ["./startup.sh"]
PS:
在 docker 容器中使用虛擬環境幾乎沒有興趣。 容器已經是一個孤立的環境,它應該只做一件事。
我的軟件包安裝如下所示:
RUN pip install -r requirements.txt --target=/app/python
我必須刪除--target=/app/python
然后 pod 狀態開始顯示正在Running
(已修復)。
所以對我來說解決方法是:
RUN pip install -r requirements.txt
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.