fix(docker): compile better-sqlite3 native addon in build stage
--ignore-scripts prevented the C++ addon from being compiled, causing a 'Could not locate bindings file' crash on startup. - deps stage: add python3/make/g++ build tools, remove --ignore-scripts - runtime stage: add libstdc++ so the compiled .node binary can load - build tools are discarded with the deps layer; runtime image stays lean
This commit is contained in:
11
Dockerfile
11
Dockerfile
@@ -5,9 +5,12 @@ FROM node:22-alpine AS deps
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
# Copy manifests and install production deps only (no devDependencies)
|
||||
# Copy manifests and install production deps only (no devDependencies).
|
||||
# build-base provides the C++ toolchain needed to compile better-sqlite3's
|
||||
# native addon. It stays in the deps stage and is NOT copied to runtime.
|
||||
COPY package.json package-lock.json ./
|
||||
RUN npm ci --omit=dev --ignore-scripts
|
||||
RUN apk add --no-cache python3 make g++ && \
|
||||
npm ci --omit=dev
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Stage 2 — runtime image (minimal attack surface)
|
||||
@@ -27,6 +30,10 @@ LABEL custom.hardware.requirement="None - runs on any Docker-supported platform
|
||||
# The /app directory is owned by root; data directory is owned by node
|
||||
WORKDIR /app
|
||||
|
||||
# libstdc++ is required at runtime to load the better-sqlite3 native addon.
|
||||
# The build tools (g++, make, python3) remain in the deps stage only.
|
||||
RUN apk add --no-cache libstdc++
|
||||
|
||||
# Copy production deps from deps stage
|
||||
COPY --from=deps /app/node_modules ./node_modules
|
||||
|
||||
|
||||
Reference in New Issue
Block a user