Docker Compose — Override Files
Docker Compose automatically loads compose.override.yml to merge development-specific settings on top of your base compose file.
How Override Works
compose.yml ← Base configuration (committed)
+
compose.override.yml ← Dev overrides (auto-loaded)
=
Resolved configuration ← What Compose actually uses
Example
compose.yml (base — production-like):
services:
api:
image: myapi:latest
ports:
- "3000:3000"
environment:
NODE_ENV: production
db:
image: postgres:16
volumes:
- db-data:/var/lib/postgresql/data
volumes:
db-data:
compose.override.yml (development overrides):
services:
api:
build: ./api # Build locally instead of pull
volumes:
- ./api:/app # Mount source code
command: npm run dev # Dev server with hot reload
environment:
NODE_ENV: development # Override environment
DEBUG: "*"
ports:
- "9229:9229" # Add debug port
Merge Rules
| Element | Behavior |
|---|---|
| Scalar values | Override replaces base |
| Maps (environment) | Merged (override wins on conflict) |
| Lists (ports) | Appended |
| volumes | Appended |
docker compose config # View the merged result
.gitignore Patterns
# Committed
compose.yml
# Git-ignored (developer-specific)
compose.override.yml
Or the reverse:
# Committed
compose.yml
compose.override.yml # Dev config shared with team
# Git-ignored
compose.local.yml # Personal overrides
Skip Override
To explicitly skip the override file:
docker compose -f compose.yml up -d
The auto-loading only happens when you don’t specify -f.
Named Override Files
For production, use a separate named file:
docker compose -f compose.yml -f compose.prod.yml up -d
compose.prod.yml:
services:
api:
image: ghcr.io/myorg/api:v1.2.3
restart: unless-stopped
deploy:
resources:
limits:
cpus: "1.0"
memory: 512M
Summary
| File | Auto-loaded | Purpose |
|---|---|---|
compose.yml |
Yes | Base configuration |
compose.override.yml |
Yes | Dev overrides |
compose.prod.yml |
No (-f flag) | Production |
compose.test.yml |
No (-f flag) | Testing |
Quick Reference
| Item | Detail |
|---|---|
| compose.override.yml | Auto-loaded for dev overrides |
| Merge | Scalars replaced, maps merged, lists appended |
| Skip | Use -f compose.yml explicitly |
| Production | -f compose.yml -f compose.prod.yml |
| Verify | docker compose config |