# syntax=docker/dockerfile:1.7 ############################################################# # Builder ############################################################# FROM node:22.18.0-bookworm-slim AS builder WORKDIR /app ENV CI=true \ NODE_ENV=development \ NPM_CONFIG_UPDATE_NOTIFIER=false \ DATABASE_URL=postgres://medusa:medusa@127.0.0.1:5432/medusa \ REDIS_URL=redis://127.0.0.1:6379 \ STORE_CORS=http://localhost:8000 \ ADMIN_CORS=http://localhost:7001 \ AUTH_CORS=http://localhost:7001 \ JWT_SECRET=build-only-jwt-secret \ COOKIE_SECRET=build-only-cookie-secret \ S3_FILE_URL=http://localhost:9000/ari-shopping \ S3_ACCESS_KEY_ID=build-access-key \ S3_SECRET_ACCESS_KEY=build-secret-key \ S3_BUCKET=ari-shopping \ S3_ENDPOINT=http://127.0.0.1:9000 COPY package.json package-lock.json .npmrc ./ RUN --mount=type=cache,id=medusa-npm-cache,target=/root/.npm \ npm ci \ --legacy-peer-deps \ --prefer-offline \ --no-audit \ --no-fund COPY tsconfig.json ./ COPY medusa-config.ts ./ COPY src ./src RUN npm run build # # Elimina todas las dependencias de desarrollo # RUN npm prune --omit=dev # # Limpia cache de npm # RUN npm cache clean --force ############################################################# # Runtime ############################################################# FROM node:22.18.0-bookworm-slim WORKDIR /app ENV NODE_ENV=production \ PORT=9000 \ NPM_CONFIG_UPDATE_NOTIFIER=false # # libgnutls30 en la base node:22.18.0-bookworm-slim trae dos CVE # CRITICAL con fix ya publicado por Debian (CVE-2026-33845, # CVE-2026-42010) -- detectado por el gate de Trivy imagen del # pipeline (run 138). Solo se actualiza este paquete puntual, no toda # la imagen, para minimizar el diff de superficie de la base. RUN apt-get update \ && apt-get upgrade -y libgnutls30 \ && rm -rf /var/lib/apt/lists/* # El CLI global de npm que trae la imagen base node:*-slim arrastra su # propia copia vendorizada de `tar` con un CVE CRITICAL # (CVE-2026-59873, detectado por Trivy en # usr/local/lib/node_modules/npm/node_modules/tar). Se elimina npm # entero -- no alcanza con borrar solo el tar vendorizado: el propio # `npx` depende de ese tar internamente (pacote/arborist) incluso para # ejecutar un binario ya instalado localmente, así que queda roto igual # si el paquete tar desaparece pero npm sigue ahí (confirmado # probando "npx medusa --version" contra la imagen: falla con # "Cannot find module 'tar'"). # # OJO con este cambio: el init container "migrations" de # workloads/ecommerce/commerce/medusa.yaml corría "npx medusa # db:migrate" contra esta misma imagen -- un primer intento de este # fix borraba npm sin ajustar ese comando y rompió el init container # en producción ("npx: executable file not found in $PATH", # medusa-deploy atascado en Init:CrashLoopBackOff, detectado revisando # el estado real del cluster después del deploy). El fix completo # incluye cambiar ese comando a invocar el CLI directo con `node`, sin # pasar por npm/npx -- mismo patrón que ya usa el CMD de este # Dockerfile más abajo. RUN rm -rf /usr/local/lib/node_modules/npm # # Solo lo necesario para ejecutar Medusa # COPY --from=builder --chown=node:node /app/node_modules ./node_modules COPY --from=builder --chown=node:node /app/.medusa/server ./ USER node EXPOSE 9000 CMD ["node","node_modules/@medusajs/cli/dist/index.js","start"]