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
|
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 ./
|
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)
|
# 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
|
# The /app directory is owned by root; data directory is owned by node
|
||||||
WORKDIR /app
|
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 production deps from deps stage
|
||||||
COPY --from=deps /app/node_modules ./node_modules
|
COPY --from=deps /app/node_modules ./node_modules
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user