gunicorn: 命令未找到。

3
当我运行我的Docker镜像时,出现“gunicorn:command not found”的错误。当我进入镜像并手动运行它时,我得到了相同的错误。
然而,pip install gunicorn的输出确认它已经安装了。
Defaulting to user installation because normal site-packages is not writeable
Requirement already satisfied: gunicorn in ./.local/lib/python3.10/site-packages (20.1.0)
Requirement already satisfied: setuptools>=3.0 in /usr/local/lib/python3.10/site-packages (from gunicorn) (58.1.0)

以下是构建此镜像所需的文件:
Dockerfile
FROM python:3.10.5-alpine

ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1

RUN adduser -D appuser

USER appuser

WORKDIR /home/appuser/

COPY --chown=appuser:appuser requirements.txt .

RUN python -m pip install --user --no-cache-dir --disable-pip-version-check --requirement requirements.txt

COPY --chown=appuser:appuser . .

ENTRYPOINT [ "./entrypoint.sh" ]

requirements.txt

django==4.0.6
psycopg2-binary==2.9.3
gunicorn==20.1.0

entrypoint.sh

#!/bin/sh
python manage.py makemigrations
python manage.py migrate
python manage.py collectstatic --no-input
gunicorn project.wsgi:application --bind=0.0.0.0:8000 --workers=4 --timeout=300 --log-level=debug --log-file=-
1个回答

3

您应该以root身份运行pip install,不要使用--user选项。

如果您运行pip install --user,它会将软件包安装到~/.local。在Docker中,$HOME环境变量通常未定义,因此这会将它们安装到/.local。如果您查看构建的镜像内部,您可能会发现可运行的/.local/bin/gunicorn,但是该/.local/bin目录不在$PATH中。

Docker中的典型用法是将Python软件包安装到“系统”Python中;Docker镜像本身与其他Python隔离。这将把*.py文件放在类似于/usr/local/lib/python3.10/site-packages的某个位置,而gunicorn可执行文件将位于/usr/local/bin中,这是标准的$PATH

FROM python:3.10.5-alpine
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
RUN adduser -D appuser
WORKDIR /home/appuser/
# but do not change USER yet

COPY --chown=appuser:appuser requirements.txt .

# Without --user option
RUN python -m pip install --no-cache-dir --disable-pip-version-check --requirement requirements.txt

# Change USER _after_ RUN pip install
USER appuser

COPY --chown=appuser:appuser . .
ENTRYPOINT [ "./entrypoint.sh" ]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接