Next.js / Dockerfile
memex-in's picture
Update Dockerfile
309e72d verified
# syntax=docker.io/docker/dockerfile:1
FROM node:18-alpine AS base
# Install dependencies only when needed
FROM base AS deps
# Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed.
RUN apk add --no-cache libc6-compat
WORKDIR /app
# Install dependencies based on the preferred package manager
COPY package.json yarn.lock* package-lock.json* pnpm-lock.yaml* .npmrc* ./
# Copy necessary files from the builder stage
# Copy production dependencies
COPY --from=builder /app/node_modules ./node_modules
# Copy the build output (.next folder)
COPY --from=builder /app/.next ./.next
# Copy public assets
COPY --from=builder /app/public ./public
# Copy next.config.js if it exists
COPY --from=builder /app/next.config.js ./next.config.js
# Set the environment variable for the Next.js port (default is 3000)
# Hugging Face Spaces typically exposes port 7860 for Gradio/Streamlit/etc,
# but for general web apps (like Next.js via the static host option or if you set up a custom server),
# it might expose port 3000 by default when detecting a standard Next.js app.
# It's good practice to set this, but Spaces often handles port mapping.
ENV PORT 3000
# Expose the port the application will run on
EXPOSE 3000
# Disable Next.js telemetry at runtime
ENV NEXT_TELEMETRY_DISABLED 1
# Command to run the production Next.js server
CMD ["npm", "start"]