# build stage FROM node:22.22.3-alpine3.23 AS build-stage # Set environment variables for non-interactive npm installs ENV NPM_CONFIG_LOGLEVEL=warn ENV CI=true WORKDIR /app # Install dependencies first to leverage caching COPY package.json pnpm-lock.yaml ./ RUN npm install -g pnpm && pnpm i --frozen-lockfile # Copy the rest of the source code COPY . . # Build the project from source RUN pnpm build # production stage FROM nginx:stable-alpine AS production-stage # Copy built assets to nginx's public directory COPY --from=build-stage /app/dist /usr/share/nginx/html # Use a custom nginx config to serve the SPA COPY nginx.conf /etc/nginx/conf.d/default.conf EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]
node_modules/ dist/ .vite/ *.log .npmrc pnpm-lock.yaml .env .env.* .idea/ .vscode/ .DS_Store *.sublime-project *.sublime-workspace "
Summary (under 1500 chars) - Exact error message and exit code: - Exact error: "ERROR: failed to build: failed to solve: failed to compute cache key: failed to calculate checksum of ref a31bb1e5-5ce1-4a95-a97c-eb330becbc42::a0sj5b45d84lwi9hsfl2p8y7t: \"/pnpm-lock.yaml\": not found" - Exit code: not shown in log - Failing command/step: - [build-stage 3/6] COPY package.json pnpm-lock.yaml ./ - Missing packages or files mentioned: - File not found: "/pnpm-lock.yaml" - Note: A warning indicates CopyIgnoredFile: Attempting to Copy file "pnpm-lock.yaml" that is excluded by .dockerignore (line 8) - Version mismatch info: - Base images used: node:22.22.3-alpine3.23 and nginx:stable-alpine - Resolved digests shown (e.g., nginx@sha256:6525b050..., node@sha256:968df39a...), but no explicit version mismatch is reported - Root cause and quick fix: - The build fails because pnpm-lock.yaml is excluded by .dockerignore and/or not present in the build context, causing the COPY to fail while computing the cache key. To fix: ensure pnpm-lock.yaml is included in the build context (or adjust .dockerignore to allow it) and make sure the file exists before the COPY.
node_modules/ dist/ .vite/ *.log .npmrc .env .env.* .idea/ .vscode/ .DS_Store *.sublime-project *.sublime-workspace "
# Exclude development artifacts node_modules/ dist/ .vite/ *.log .npmrc .env .env.* .idea/ .vscode/ .DS_Store *.sublime-project *.sublime-workspace !pnpm-lock.yaml
- Lockfile version: 9.0 - Settings: autoInstallPeers: true; excludeLinksFromLockfile: false Importers (root “.”) - dependencies (highlights): - @it-tools/bip39 0.0.4 - @it-tools/oggen 1.3.0 - @regexper/render 1.0.0 - @sindresorhus/slugify 2.2.1 - @tabler/icons-vue 3.20.0 (vue@3.3.4) - @tiptap/pm 2.1.6 - @tiptap/starter-kit 2.1.6 - @tiptap/vue-3 2.0.3 (deps include @tiptap/core@2.1.12, @tiptap/pm@2.1.6) - @types/figlet 1.5.8 - @types/markdown-it 13.0.9 - @vicons/material 0.12.0 - @vueuse/core 10.3.0 (vue@3.3.4) - @vueuse/head 1.0.0 (typescript@5.2.2, vue@3.3.4) - @vueuse/router 10.0.0 (vue@3.3.4) - bcryptjs 2.4.3 - date-fns 2.29.3 - monaco-editor 0.43.0 - pinia 2.0.34 (typescript@5.2.2, vue@3.3.4) - qrcode 1.5.1 - uuid 9.0.0 - vue 3.3.4 - vue-i18n 9.9.1 - vue-router 4.1.6 - markdown-it 14.1.0 - date-fns-tz 2.0.0 - figlet 1.7.0 - monaco-editor 0.43.0 - sensible UI libs not exhaustively listed here - devDependencies (representative): - @antfu/eslint-config 0.41.0 - @vitejs/plugin-vue 4.3.2 - eslint 8.47.0 - typescript 5.2.2 - vite 4.4.9 - unocss 0.65.1 (and @unocss/* ecosystem) - @vitejs/plugin-vue-jsx 3.0.2 - vue 3.3.4 Packages (selected notable entries and versions) - vue@3.3.4 - vue-router@4.1.6 - vue-i18n@9.9.1 - @tiptap/core@2.1.12 - @tiptap/vue-3@2.0.3 - @tiptap/pm@2.1.6 - @tiptap/starter-kit@2.1.6 - @tabler/icons-vue@3.20.0 - pinia@2.0.34 - monaco-editor@0.43.0 - markdown-it@14.1.0 - date-fns@2.29.3 - date-fns-tz@2.0.0 - uuid@9.0.0 - qrcode@1.5.1 - figlet@1.7.0 - unocss@0.65.1 (and related @unocss/* modules) - vite@4.4.9 - eslint@8.47.0 - typescript@5.2.2 - vue-use packages: @vueuse/core@10.3.0, @vueuse/router@10.0.0, @vueuse/head@1.0.0 - vite-plugin-pwa@0.16.0 - vue-demi@0.14.5 (vue 3) (present in ecosystem) - @unocss/core@0.65.1, @unocss/preset-mini@0.65.1, etc. - @mdit-vue/plugin-frontmatter@0.12.0 (and related markdown tooling) - @regexper/render@1.0.0; @regexper/parser@1.0.0 Snapshots - Example: complex nested snapshot mappings for certain monorepo-like subsystems (e.g., @ampproject/remapping, @antfu/* configs, etc.) Notes - This is a complete lockfile graph. Key runtime/dev tooling and framework stack centers on Vue 3, Vite, TypeScript 5.x, ESLint 8.x, and the TipTap editor suite, with UnoCSS and related plugins. If you need a focused subset (e.g., only Vue + Vite + TS), I can extract a minimal listing.
# Exclude development artifacts node_modules/ dist/ .vite/ *.log .npmrc .env .env.* .idea/ .vscode/ .DS_Store *.sublime-project *.sublime-workspace !pnpm-lock.yaml
Build timed out after 600s
Build timed out after 600s
Build timed out after 600s
# build stage FROM node:22.22.3-alpine3.23 AS build-stage # Install build dependencies RUN apk add --no-cache python3 build-base # Ensure python is available as python RUN ["/bin/sh","-lc","ln -s /usr/bin/python3 /usr/bin/python || true"] # Set environment variables for non-interactive npm installs ENV NPM_CONFIG_LOGLEVEL=warn ENV CI=true WORKDIR /app # Install dependencies first to leverage caching COPY package.json pnpm-lock.yaml ./ RUN npm install -g pnpm && pnpm i --frozen-lockfile # Copy the rest of the source code COPY . . # Build the project from source RUN pnpm build # production stage FROM nginx:stable-alpine AS production-stage # Copy built assets to nginx's public directory COPY --from=build-stage /app/dist /usr/share/nginx/html # Use a custom nginx config to serve the SPA COPY nginx.conf /etc/nginx/conf.d/default.conf EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]
Build timed out after 600s
# build stage FROM node:22.22.3-alpine3.23 AS build-stage # Set environment variables for non-interactive npm installs ENV NPM_CONFIG_LOGLEVEL=warn ENV CI=true WORKDIR /app COPY package.json pnpm-lock.yaml ./ RUN npm install -g pnpm && pnpm i --frozen-lockfile COPY . . RUN pnpm build # production stage FROM nginx:stable-alpine AS production-stage COPY --from=build-stage /app/dist /usr/share/nginx/html COPY nginx.conf /etc/nginx/conf.d/default.conf EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]
# Ignore npm and yarn specific folders node_modules dist build .DS_Store .git .gitignore pnpm-lock.yaml
Summary (under 1500 chars): - Exact error message and exit code - Error: "ERROR: failed to build: failed to solve: failed to compute cache key: failed to calculate checksum of ref a31bb1e5-5ce1-4a95-a97c-eb330becbc42::vg6leucejx0w83fkqvarj75wf: "/pnpm-lock.yaml": not found" - Exit code: not provided in log - Failing command/step - [build-stage 3/6] COPY package.json pnpm-lock.yaml ./ - Missing packages or files mentioned - pnpm-lock.yaml not found in build context; CopyIgnoredFile warning indicates pnpm-lock.yaml is excluded by .dockerignore (line 7) - Version mismatch info - Production base image: nginx:stable-alpine@sha256:6525b050aa05151ca19ec7090851bc8c12006cffdae5187f3d28023402f44cfa - Build stage base image: node:22.22.3-alpine3.23@sha256:968df39aedcea65eeb078fb336ed7191baf48f972b4479711397108be0966920 Notes: - The error stems from trying to copy pnpm-lock.yaml, which is ignored by .dockerignore, leading to a missing file in the build context and a checksum calculation failure.
# Ignore npm and yarn specific folders node_modules dist build .DS_Store .git .gitignore
# build stage FROM node:22.22.3-alpine3.23 AS build-stage # Set environment variables for non-interactive npm installs ENV NPM_CONFIG_LOGLEVEL=warn ENV CI=true WORKDIR /app COPY package.json ./ COPY pnpm-lock.yaml ./ RUN npm install -g pnpm && pnpm i --frozen-lockfile COPY . . RUN pnpm build # production stage FROM nginx:stable-alpine AS production-stage COPY --from=build-stage /app/dist /usr/share/nginx/html COPY nginx.conf /etc/nginx/conf.d/default.conf EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]
Build timed out after 600s
Build timed out after 600s
# build stage FROM node:22.22.3-alpine3.23 AS build-stage # Set environment variables for non-interactive npm installs ENV NPM_CONFIG_LOGLEVEL=warn ENV CI=true WORKDIR /app # Install build dependencies for native modules and git access RUN apk add --no-cache python3 g++ make git COPY package.json pnpm-lock.yaml ./ RUN corepack enable || true RUN npm install -g pnpm RUN pnpm i --frozen-lockfile COPY . . RUN pnpm build # production stage FROM nginx:stable-alpine AS production-stage COPY --from=build-stage /app/dist /usr/share/nginx/html COPY nginx.conf /etc/nginx/conf.d/default.conf # Basic healthcheck to ensure the static site is present HEALTHCHECK --interval=30s --timeout=5s --start-period=5s --retries=3 CMD ["/bin/sh","-lc","[ -f /usr/share/nginx/html/index.html ]"] EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]
- Failing step: build-stage 6/9, RUN npm install -g pnpm - Exact error message and exit code: - npm error code EEXIST - npm error path /usr/local/bin/pnpm - npm error EEXIST: file already exists - npm error File exists: /usr/local/bin/pnpm - npm error Remove the existing file and try again, or run npm - npm error with --force to overwrite files recklessly. - npm error A complete log of this run can be found in: /root/.npm/_logs/2026-05-16T11_51_09_914Z-debug-0.log - ERROR: failed to build: failed to solve: process "/bin/sh -c npm install -g pnpm" did not complete successfully: exit code: 1 - Missing packages or files mentioned: - Conflict due to an existing file: /usr/local/bin/pnpm (file already exists) - Version mismatch info: - No version mismatch is reported. The issue is a file conflict when installing pnpm globally.