Python 多阶段 docker 容器 - 本地包

Python multi stage docker container - local package

我正在 运行 为我的 python 容器构建多阶段 docker。

我的第一个构建步骤安装了 requirements.txt

中的所有依赖项
##################
## Python Builder Image
##################
FROM python:3.10 AS python-builder

# create and activate virtual environment
# using final folder name to avoid path issues with packages
ENV VIRTUAL_ENV="/home/app_user/venv"
RUN python3 -m venv $VIRTUAL_ENV
ENV PATH="$VIRTUAL_ENV/bin:$PATH"

# install requirements
COPY requirements.txt .
COPY package/ package/
RUN pip3 install --upgrade pip==21.3.1
RUN pip3 install --no-cache-dir -r requirements.txt

requirements.txt 包含安装包的 -e 命令。 当我构建我的最终容器镜像时,应用程序抛出一个错误,指出找不到我的包。

##################
## Final Image
##################
FROM python:3.10-alpine3.14 as app

ENV VIRTUAL_ENV="/home/app_user/venv"
ENV PATH="$VIRTUAL_ENV/bin:$PATH"

ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
ENV PIP_DISABLE_PIP_VERSION_CHECK=1

USER app_user
WORKDIR /home/app_user/code
COPY --from=node-builder /imports /imports
COPY main.py config.py ./
COPY scripts/ scripts/

CMD gunicorn main:flask_app --worker-tmp-dir /dev/shm -k uvicorn.workers.UvicornWorker --bind 0.0.0.0:$PORT

错误:

ModuleNotFoundError: No module named 'package'

有什么想法吗?

已通过在构建器映像中正确安装包来修复:

# install requirements
COPY requirements.txt .
COPY package/ package/
RUN pip3 install --upgrade pip==21.3.1
RUN pip3 install ./package
RUN pip3 install --no-cache-dir -r requirements.txt

与之前相比,requirements.txt:

constructs==10.0.9
authlib==0.11
flask==2.0.2
uvicorn[standard]==0.15.0
gunicorn==20.1.0
virtualenv
-e package ## didn't like this