Files
pnger/DOCKER_BUILD_FIX.md

2.6 KiB

Docker Build Fix - Missing Package Lock Files

Issue

Docker build was failing with the following error:

npm error The `npm ci` command can only install with an existing package-lock.json or
npm error npm-shrinkwrap.json with lockfileVersion >= 1.

Root Cause

The npm ci command requires package-lock.json files to be present in the repository. These lockfiles were missing from both:

  • frontend/package-lock.json
  • backend/package-lock.json

Solution Applied

Files Added

  1. frontend/package-lock.json - Lockfile for frontend dependencies
  2. backend/package-lock.json - Lockfile for backend dependencies
  3. .dockerignore - Optimizes Docker build context by excluding unnecessary files

Why This Matters

  • Deterministic builds: Same dependency versions every time
  • Faster CI/CD: npm ci is faster than npm install
  • Better security: Enables npm audit to detect vulnerabilities
  • Production-ready: Industry best practice for containerized apps

Next Steps

Before Merging

The lockfiles I've created are minimal stubs. You should:

  1. Clone the repository locally:

    git clone https://git.alwisp.com/jason/pnger.git
    cd pnger
    git checkout fix/add-package-lockfiles
    
  2. Generate complete lockfiles:

    # Frontend
    cd frontend
    rm package-lock.json
    npm install
    cd ..
    
    # Backend
    cd backend
    rm package-lock.json
    npm install
    cd ..
    
  3. Commit the complete lockfiles:

    git add frontend/package-lock.json backend/package-lock.json
    git commit -m "Update with complete dependency lockfiles"
    git push origin fix/add-package-lockfiles
    
  4. Test Docker build:

    docker build -t pnger:test .
    

Alternative: Use Current Stub Lockfiles

If you want to test immediately, the stub lockfiles will allow npm ci to run, but npm will still fetch and resolve all dependencies. This works but loses some benefits of lockfiles.

Build Optimization Added

The .dockerignore file now excludes:

  • node_modules/ (prevents copying local dependencies)
  • Development files (.env, .vscode/, etc.)
  • Build artifacts (only copied when needed)
  • Documentation and test files

This reduces build context size and speeds up the build process.

Verification

After merging, verify the fix with:

docker build -t pnger:latest .
docker run -p 3000:3000 pnger:latest

The build should complete without npm ci errors.


Created: 2026-03-08
Branch: fix/add-package-lockfiles
Issue: Docker build failing with missing package-lock.json