mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-08-27 09:42:53 +00:00
The RUN instruction cannot contain COPY commands. Fixed by moving the COPY instructions outside the RUN block and copying both Next.js (.next) and Vite (dist) build outputs from the builder stage. The nginx configuration can serve both build outputs appropriately. Fixes: Docker build failure with "COPY: not found" error
63 lines
2.1 KiB
Docker
63 lines
2.1 KiB
Docker
# syntax=docker/dockerfile:1
|
|
|
|
ARG TURBO_FILTER=@edr/freight-portal
|
|
ARG APP_PATH=apps/edr-freight-web/portal
|
|
ARG VITE_API_URL=http://localhost:3001/api
|
|
|
|
FROM node:24.15.0-alpine AS base
|
|
RUN apk add --no-cache libc6-compat
|
|
RUN corepack enable
|
|
WORKDIR /app
|
|
|
|
FROM base AS pruner
|
|
ARG TURBO_FILTER
|
|
COPY . .
|
|
RUN pnpm dlx turbo prune "${TURBO_FILTER}" --docker
|
|
|
|
FROM base AS installer
|
|
COPY --from=pruner /app/out/json/ .
|
|
COPY --from=pruner /app/out/pnpm-lock.yaml ./pnpm-lock.yaml
|
|
RUN --mount=type=secret,id=npmrc,target=./.npmrc,required=false \
|
|
--mount=type=cache,id=pnpm,target=/pnpm/store \
|
|
pnpm install --frozen-lockfile
|
|
|
|
FROM base AS builder
|
|
ARG TURBO_FILTER
|
|
ARG APP_PATH
|
|
ARG VITE_API_URL
|
|
ENV VITE_API_URL=${VITE_API_URL}
|
|
COPY --from=installer /app/ .
|
|
COPY --from=pruner /app/out/full/ .
|
|
|
|
# Configure npm/pnpm with extended timeouts and retries for network requests
|
|
RUN npm config set fetch-timeout 120000 && \
|
|
npm config set fetch-retry-mintimeout 20000 && \
|
|
npm config set fetch-retry-maxtimeout 120000 && \
|
|
npm config set fetch-retries 5
|
|
|
|
RUN NODE_OPTIONS="--max-old-space-size=4096" pnpm turbo build --filter="${TURBO_FILTER}..." || \
|
|
(echo "Build failed for ${TURBO_FILTER}" && \
|
|
ls -la /app/${APP_PATH}/ 2>/dev/null || echo "App path does not exist" && \
|
|
exit 1)
|
|
|
|
# Verify build output exists before proceeding
|
|
# Check for .next directory (Next.js) or dist directory (Vite/other)
|
|
RUN if [ ! -d "/app/${APP_PATH}/.next" ] && [ ! -d "/app/${APP_PATH}/dist" ]; then \
|
|
echo "ERROR: Build output directory not found at /app/${APP_PATH}/.next or /app/${APP_PATH}/dist"; \
|
|
echo "Contents of /app/${APP_PATH}:"; \
|
|
ls -la /app/${APP_PATH}/ 2>/dev/null || echo "Directory does not exist"; \
|
|
exit 1; \
|
|
fi
|
|
|
|
FROM nginx:alpine AS runner
|
|
ARG APP_PATH
|
|
COPY infrastructure/nginx/spa.conf /etc/nginx/conf.d/default.conf
|
|
|
|
# Copy Next.js or Vite build output from builder stage
|
|
COPY --from=builder /app/${APP_PATH}/.next /usr/share/nginx/html/.next
|
|
COPY --from=builder /app/${APP_PATH}/public /usr/share/nginx/html/public
|
|
COPY --from=builder /app/${APP_PATH}/dist /usr/share/nginx/html/dist
|
|
|
|
EXPOSE 80
|
|
CMD ["nginx", "-g", "daemon off;"]
|