94 lines
2.6 KiB
Markdown
94 lines
2.6 KiB
Markdown
|
|
# 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**:
|
||
|
|
```bash
|
||
|
|
git clone https://git.alwisp.com/jason/pnger.git
|
||
|
|
cd pnger
|
||
|
|
git checkout fix/add-package-lockfiles
|
||
|
|
```
|
||
|
|
|
||
|
|
2. **Generate complete lockfiles**:
|
||
|
|
```bash
|
||
|
|
# 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**:
|
||
|
|
```bash
|
||
|
|
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**:
|
||
|
|
```bash
|
||
|
|
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:
|
||
|
|
```bash
|
||
|
|
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
|