mirror of
https://github.com/tiennm99/litellm.git
synced 2026-06-18 07:33:58 +00:00
90850bf6d5
Fixes cross-platform Docker build issue where `prisma generate` fails when building for amd64 platform from macOS. The Prisma CLI requires Node.js and npm to be available in the runtime environment. The Python prisma package (v0.11.0) uses nodeenv to bootstrap Node.js if not found. However, the downloaded npm v10 fails with a "sizeCalculation" error in minimal Chainguard environments during cross-platform builds. Providing system nodejs/npm resolves this. Changes: - Added nodejs and npm to runtime dependencies (Dockerfile:51) - This enables prisma generate to run successfully during the build Error without fix: npm error cannot set sizeCalculation without setting maxSize or maxEntrySize subprocess.CalledProcessError: Command '[...nodeenv/bin/npm', 'install', 'prisma@5.4.2']' returned non-zero exit status 1. Testing: docker buildx build --platform linux/amd64 -t litellm:test . Co-authored-by: Claude <noreply@anthropic.com>
89 lines
2.4 KiB
Docker
89 lines
2.4 KiB
Docker
# Base image for building
|
|
ARG LITELLM_BUILD_IMAGE=cgr.dev/chainguard/python:latest-dev
|
|
|
|
# Runtime image
|
|
ARG LITELLM_RUNTIME_IMAGE=cgr.dev/chainguard/python:latest-dev
|
|
# Builder stage
|
|
FROM $LITELLM_BUILD_IMAGE AS builder
|
|
|
|
# Set the working directory to /app
|
|
WORKDIR /app
|
|
|
|
USER root
|
|
|
|
# Install build dependencies
|
|
RUN apk add --no-cache gcc python3-dev openssl openssl-dev
|
|
|
|
|
|
RUN pip install --upgrade pip>=24.3.1 && \
|
|
pip install build
|
|
|
|
# Copy the current directory contents into the container at /app
|
|
COPY . .
|
|
|
|
# Build Admin UI
|
|
RUN chmod +x docker/build_admin_ui.sh && ./docker/build_admin_ui.sh
|
|
|
|
# Build the package
|
|
RUN rm -rf dist/* && python -m build
|
|
|
|
# There should be only one wheel file now, assume the build only creates one
|
|
RUN ls -1 dist/*.whl | head -1
|
|
|
|
# Install the package
|
|
RUN pip install dist/*.whl
|
|
|
|
# install dependencies as wheels
|
|
RUN pip wheel --no-cache-dir --wheel-dir=/wheels/ -r requirements.txt
|
|
|
|
# ensure pyjwt is used, not jwt
|
|
RUN pip uninstall jwt -y
|
|
RUN pip uninstall PyJWT -y
|
|
RUN pip install PyJWT==2.9.0 --no-cache-dir
|
|
|
|
# Runtime stage
|
|
FROM $LITELLM_RUNTIME_IMAGE AS runtime
|
|
|
|
# Ensure runtime stage runs as root
|
|
USER root
|
|
|
|
# Install runtime dependencies
|
|
RUN apk add --no-cache openssl tzdata nodejs npm
|
|
|
|
# Upgrade pip to fix CVE-2025-8869
|
|
RUN pip install --upgrade pip>=24.3.1
|
|
|
|
WORKDIR /app
|
|
# Copy the current directory contents into the container at /app
|
|
COPY . .
|
|
RUN ls -la /app
|
|
|
|
# Copy the built wheel from the builder stage to the runtime stage; assumes only one wheel file is present
|
|
COPY --from=builder /app/dist/*.whl .
|
|
COPY --from=builder /wheels/ /wheels/
|
|
|
|
# Install the built wheel using pip; again using a wildcard if it's the only file
|
|
RUN pip install *.whl /wheels/* --no-index --find-links=/wheels/ && rm -f *.whl && rm -rf /wheels
|
|
|
|
# Remove test files and keys from dependencies
|
|
RUN find /usr/lib -type f -path "*/tornado/test/*" -delete && \
|
|
find /usr/lib -type d -path "*/tornado/test" -delete
|
|
|
|
# Install semantic_router and aurelio-sdk using script
|
|
RUN chmod +x docker/install_auto_router.sh && ./docker/install_auto_router.sh
|
|
|
|
# Generate prisma client
|
|
RUN prisma generate
|
|
RUN chmod +x docker/entrypoint.sh
|
|
RUN chmod +x docker/prod_entrypoint.sh
|
|
|
|
EXPOSE 4000/tcp
|
|
|
|
RUN apk add --no-cache supervisor
|
|
COPY docker/supervisord.conf /etc/supervisord.conf
|
|
|
|
ENTRYPOINT ["docker/prod_entrypoint.sh"]
|
|
|
|
# Append "--detailed_debug" to the end of CMD to view detailed debug logs
|
|
CMD ["--port", "4000"]
|