Spaces:
Running
Running
# Include global ARGs at the dockerfile top | |
ARG ARCH="x86_64" | |
ARG WORKDIR_ROOT="/var/task" | |
FROM python:3.12-bookworm AS builder_global | |
ARG ARCH | |
ARG WORKDIR_ROOT | |
ARG POETRY_NO_INTERACTION | |
ARG POETRY_VIRTUALENVS_IN_PROJECT | |
ARG POETRY_VIRTUALENVS_CREATE | |
ARG POETRY_CACHE_DIR | |
ARG ZLIB1G="http://ftp.it.debian.org/debian/pool/main/z/zlib/zlib1g_1.3.dfsg-3+b1_amd64.deb" | |
ENV PYTHONPATH="${WORKDIR_ROOT}:${PYTHONPATH}:/usr/local/lib/python3/dist-packages" | |
ENV MPLCONFIGDIR=/tmp/matplotlib | |
ARG USER="999" | |
RUN echo "ARCH: $ARCH, ARG POETRY_CACHE_DIR: ${POETRY_CACHE_DIR}, ENV PYTHONPATH: $PYTHONPATH, USER: $USER ..." | |
# RUN groupadd -g 999 python && useradd -r -u 999 -g python python | |
# Set working directory to function root directory | |
WORKDIR ${WORKDIR_ROOT} | |
COPY --chown=python:python requirements.txt ${WORKDIR_ROOT}/ | |
# avoid segment-geospatial exception caused by missing libGL.so.1 library | |
RUN echo "BUILDER: check libz.s* before start" && ls -l /usr/lib/${ARCH}-linux-gnu/libz.so* | |
RUN apt update && apt install -y curl ffmpeg libgl1 python3-pip && apt clean | |
COPY --chown=python:python ./dockerfiles/apt_preferences /etc/apt/preferences | |
COPY --chown=python:python ./dockerfiles/debian.sources /etc/apt/sources.list.d/debian.sources | |
RUN apt update && apt install -t trixie zlib1g -y && apt clean | |
RUN echo "BUILDER: check libz.s* after install from trixie" && ls -l /usr/lib/${ARCH}-linux-gnu/libz.so* | |
RUN ls -l /etc/apt/sources* /etc/apt/preferences* | |
# poetry installation path is NOT within ${WORKDIR_ROOT}: not needed for runtime docker image | |
RUN python3 -m venv ${WORKDIR_ROOT}/.venv | |
ENV PATH="${WORKDIR_ROOT}/.venv/bin:$PATH" | |
RUN . ${WORKDIR_ROOT}/.venv/bin/activate && python -m pip install -r ${WORKDIR_ROOT}/requirements.txt | |
# USER 999 | |
FROM python:3.12-slim-bookworm AS runtime | |
RUN groupadd -g 999 python && useradd -r -u 999 -g python python | |
ARG ARCH | |
ARG WORKDIR_ROOT | |
ENV PYTHONPATH="${WORKDIR_ROOT}:${WORKDIR_ROOT}/.venv:${PYTHONPATH}:/usr/local/lib/python3/dist-packages" | |
ENV MPLCONFIGDIR=/tmp/matplotlib | |
ENV VIRTUAL_ENV=${WORKDIR_ROOT}/.venv PATH="${WORKDIR_ROOT}/.venv/bin:$PATH" | |
RUN apt update && apt install -y ffmpeg && apt clean | |
RUN echo "COPY --chown=python:python --from=builder_global /usr/lib/${ARCH}-linux-gnu/libGL.so* /usr/lib/${ARCH}-linux-gnu/" | |
RUN echo "RUNTIME: check libz.s* before upgrade" && ls -l /usr/lib/${ARCH}-linux-gnu/libz.so* | |
RUN echo "RUNTIME: remove libz.s* to force upgrade" && rm /usr/lib/${ARCH}-linux-gnu/libz.so* | |
COPY --chown=python:python --from=builder_global /usr/lib/${ARCH}-linux-gnu/libz.so* /usr/lib/${ARCH}-linux-gnu/ | |
COPY --chown=python:python --from=builder_global /lib/${ARCH}-linux-gnu/libexpat.so* /lib/${ARCH}-linux-gnu/ | |
RUN echo "RUNTIME: check libz.s* after copy" && ls -l /usr/lib/${ARCH}-linux-gnu/libz.so* | |
COPY --chown=python:python --from=builder_global ${WORKDIR_ROOT}/.venv ${WORKDIR_ROOT}/.venv | |
RUN echo "check ffmpeg files..." | |
RUN ls -ld /usr/share/ffmpeg || echo "ffpeg folder not found!" | |
RUN ls -l /usr/bin/ff* || echo "ffpeg bin not found!" | |
RUN ls -l /usr/share/ffmpeg || echo "ffpeg folder share not found!" | |
RUN . ${WORKDIR_ROOT}/.venv && which python && pip list | |
RUN echo "new WORKDIR_ROOT after hidden venv COPY --chown=python:python => ${WORKDIR_ROOT}" | |
RUN ls -ld ${WORKDIR_ROOT}/ | |
RUN ls -lA ${WORKDIR_ROOT}/ | |