运行 带有 venv 的 docker 容器时找不到 gunicorn
gunicorn not found when running a docker container with venv
我正在尝试 运行 一个 Docker 容器,它抱怨错误消息:/bin/sh: gunicorn: not found
。在没有 Docker 的情况下在本地启动服务器工作正常。并且构建图像也可以正常工作。我是 docker 的新手,所以我不知道我的 Docker 文件中是否有任何东西看起来很奇怪..
我的Docker文件:
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' 退出。因此任何以下命令都不会受到影响。
您可以添加 shell 脚本 (startup.sh),例如
#!/bin/sh
source venv/bin/activate
gunicorn -b :5000 --access-logfile - --error-logfile - wsgi:app
然后 CMD ["./startup.sh"]
PS:
人们对在 docker 容器中使用虚拟环境没什么兴趣。容器已经是一个孤立的环境,它应该只做一件事。
我正在尝试 运行 一个 Docker 容器,它抱怨错误消息:/bin/sh: gunicorn: not found
。在没有 Docker 的情况下在本地启动服务器工作正常。并且构建图像也可以正常工作。我是 docker 的新手,所以我不知道我的 Docker 文件中是否有任何东西看起来很奇怪..
我的Docker文件:
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' 退出。因此任何以下命令都不会受到影响。
您可以添加 shell 脚本 (startup.sh),例如
#!/bin/sh
source venv/bin/activate
gunicorn -b :5000 --access-logfile - --error-logfile - wsgi:app
然后 CMD ["./startup.sh"]
PS:
人们对在 docker 容器中使用虚拟环境没什么兴趣。容器已经是一个孤立的环境,它应该只做一件事。