使用venv运行docker容器时找不到gunicorn

时间:2018-12-13 13:32:10

标签: python docker flask python-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

1 个答案:

答案 0 :(得分:4)

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容器中使用虚拟环境几乎没有兴趣。容器已经是一个孤立的环境,应该只做一件事。