85 lines
2.3 KiB
Markdown
85 lines
2.3 KiB
Markdown
# Docker Build Fix
|
|
|
|
## Issues Fixed
|
|
|
|
### 1. Database COPY Error
|
|
The Docker build was failing with:
|
|
```
|
|
ERROR: failed to solve: failed to compute cache key: failed to calculate checksum of ref: "/data/nodes.db": not found
|
|
```
|
|
|
|
### 2. Missing Dockerfile.nginx
|
|
```
|
|
ERROR: failed to solve: failed to read dockerfile: open Dockerfile.nginx: no such file or directory
|
|
```
|
|
|
|
### 3. npm ci Production Flag
|
|
```
|
|
ERROR: failed to solve: process "/bin/sh -c npm ci --only=production && npm cache clean --force" did not complete successfully: exit code: 1
|
|
```
|
|
|
|
## Root Causes & Solutions
|
|
|
|
### 1. Invalid COPY Syntax
|
|
Docker's COPY command doesn't support shell operators like `2>/dev/null || true`.
|
|
|
|
**Solution**: Removed the problematic COPY command and created data directory with RUN.
|
|
|
|
### 2. Dockerfile.nginx Not Yet Implemented
|
|
The GitHub Actions workflow referenced `Dockerfile.nginx` which is a Phase 2 feature.
|
|
|
|
**Solution**: Commented out the nginx build job until Phase 2 implementation.
|
|
|
|
### 3. Deprecated npm Flag
|
|
The `--only=production` flag is deprecated in newer npm versions.
|
|
|
|
**Solution**: Changed to `--omit=dev` which is the current syntax.
|
|
|
|
## Changes Made
|
|
|
|
### Dockerfile Changes
|
|
```diff
|
|
- # Pre-initialize database during build
|
|
- RUN mkdir -p /app/data && npm run rebuild || echo "Database will be initialized at runtime"
|
|
+ # Build TypeScript only
|
|
+ RUN npm run build
|
|
|
|
- # Copy pre-built database if it exists
|
|
- COPY --from=builder /app/data/nodes.db ./data/nodes.db 2>/dev/null || true
|
|
+ # Create data directory
|
|
+ RUN mkdir -p /app/data
|
|
|
|
- RUN npm ci --only=production && \
|
|
+ RUN npm ci --omit=dev && \
|
|
npm cache clean --force
|
|
```
|
|
|
|
### GitHub Actions Workflow Changes
|
|
```diff
|
|
- name: Log in to GitHub Container Registry
|
|
+ if: github.event_name != 'pull_request'
|
|
uses: docker/login-action@v3
|
|
|
|
# Commented out nginx build until Phase 2
|
|
- build-nginx:
|
|
- name: Build nginx-enhanced Docker Image
|
|
+ # build-nginx:
|
|
+ # name: Build nginx-enhanced Docker Image
|
|
```
|
|
|
|
## Result
|
|
✅ Docker build now succeeds
|
|
✅ Database initialization happens at container startup
|
|
✅ GitHub Actions workflow will work properly
|
|
✅ No manual intervention required
|
|
|
|
## Testing
|
|
```bash
|
|
# Build locally
|
|
docker build -t n8n-mcp:test .
|
|
|
|
# Run and verify
|
|
docker run -d --name test -e MCP_MODE=http -e AUTH_TOKEN=test -p 3000:3000 n8n-mcp:test
|
|
docker logs test
|
|
curl http://localhost:3000/health
|
|
``` |