Docker: drop env overrides from builder, COPY /root/.cache to runtime

Follow-up on review feedback: the previous commit had the builder
download the query engine into /app/.cache, then threw it away in
the runtime stage and re-downloaded into /root/.cache. That doubled
the build-time network fetch.

Remove PRISMA_BINARY_CACHE_DIR and XDG_CACHE_HOME from the builder
stage as well, so its prisma generate lands in /root/.cache with the
correct path layout on its own. Drop the runtime-stage prisma generate
and instead COPY --from=builder /root/.cache /root/.cache. Single
download, smaller image.
This commit is contained in:
Yuneng Jiang
2026-04-21 15:46:47 -07:00
parent 731c549876
commit ce755048e5
2 changed files with 12 additions and 22 deletions
+6 -11
View File
@@ -27,10 +27,8 @@ RUN apk add --no-cache \
npm \
libsndfile
ENV PRISMA_BINARY_CACHE_DIR=/app/.cache/prisma-python/binaries \
UV_PROJECT_ENVIRONMENT=/app/.venv \
ENV UV_PROJECT_ENVIRONMENT=/app/.venv \
UV_LINK_MODE=copy \
XDG_CACHE_HOME=/app/.cache \
PATH="/app/.venv/bin:${PATH}"
# Copy dependency metadata first for layer caching
@@ -97,18 +95,15 @@ WORKDIR /app
ENV PATH="/app/.venv/bin:${PATH}"
COPY --from=builder /app /app
# Prisma binaries live in $HOME/.cache (default prisma-python location),
# which is /root/.cache here. Copy them from the builder so they survive
# deployments that volume-mount /app/.cache (e.g. readOnlyRootFilesystem
# + emptyDir) — otherwise the mount would shadow the baked-in query engine.
COPY --from=builder /root/.cache /root/.cache
RUN find /app/.venv -type f -path "*/tornado/test/*" -delete && \
find /app/.venv -type d -path "*/tornado/test" -delete
# Regenerate the Prisma client in the runtime stage so the baked-in
# BINARY_PATHS resolve to a location outside /app. Users with volume mounts
# that shadow /app/.cache (e.g. readOnlyRootFilesystem + emptyDir) would
# otherwise lose access to the pre-downloaded query engine at runtime.
# Drop the builder's /app/.cache afterwards — it's stale and adds ~800 MB
# the runtime doesn't use.
RUN rm -rf /app/.cache && prisma generate --schema=./schema.prisma
EXPOSE 4000/tcp
COPY docker/supervisord.conf /etc/supervisord.conf
+6 -11
View File
@@ -26,10 +26,8 @@ RUN apk add --no-cache \
npm \
libsndfile
ENV PRISMA_BINARY_CACHE_DIR=/app/.cache/prisma-python/binaries \
UV_PROJECT_ENVIRONMENT=/app/.venv \
ENV UV_PROJECT_ENVIRONMENT=/app/.venv \
UV_LINK_MODE=copy \
XDG_CACHE_HOME=/app/.cache \
PATH="/app/.venv/bin:${PATH}"
# Copy dependency metadata first for layer caching
@@ -95,18 +93,15 @@ WORKDIR /app
ENV PATH="/app/.venv/bin:${PATH}"
COPY --from=builder /app /app
# Prisma binaries live in $HOME/.cache (default prisma-python location),
# which is /root/.cache here. Copy them from the builder so they survive
# deployments that volume-mount /app/.cache (e.g. readOnlyRootFilesystem
# + emptyDir) — otherwise the mount would shadow the baked-in query engine.
COPY --from=builder /root/.cache /root/.cache
RUN find /app/.venv -type f -path "*/tornado/test/*" -delete && \
find /app/.venv -type d -path "*/tornado/test" -delete
# Regenerate the Prisma client in the runtime stage so the baked-in
# BINARY_PATHS resolve to a location outside /app. Users with volume mounts
# that shadow /app/.cache (e.g. readOnlyRootFilesystem + emptyDir) would
# otherwise lose access to the pre-downloaded query engine at runtime.
# Drop the builder's /app/.cache afterwards — it's stale and adds ~800 MB
# the runtime doesn't use.
RUN rm -rf /app/.cache && prisma generate --schema=./schema.prisma
EXPOSE 4000/tcp
COPY docker/supervisord.conf /etc/supervisord.conf