Stop doing docker compose down && docker compose up for every code change. Docker Compose lets you restart individual services while keeping the rest running.
The solution
Restart just what changed:
# Restart only the web service
docker compose up -d web
# Your database, cache, and queue keep running!
This simple command saves minutes per restart. Your database keeps its data, Redis maintains its cache, message queues preserve their state.
Common patterns
Basic restart after code changes:
# Make your changes, then:
docker compose up -d api
Force recreate when config changed:
# When you've changed environment variables or volumes
docker compose up -d --force-recreate web
Rebuild and restart for local builds:
# After changing code in a service you build
docker compose up -d --build api
Pull latest image and restart:
docker compose pull web
docker compose up -d web
Real production example
Here’s our typical development workflow:
services:
api:
build: ./api
volumes:
- ./api:/app # Code mounted for development
depends_on:
- postgres
- redis
postgres:
image: postgres:15
volumes:
- pgdata:/var/lib/postgresql/data # Persistent data
redis:
image: redis:7-alpine
Development session:
# Start everything
docker compose up -d
# Make API changes, restart just the API
docker compose up -d api
# Database and Redis stay running with all your test data!
Check what’s running
See the impact:
# Before restart
docker compose ps
Output:
NAME STATUS PORTS
myapp-api-1 Up 2 hours 0.0.0.0:3000->3000/tcp
myapp-postgres-1 Up 2 hours 5432/tcp
myapp-redis-1 Up 2 hours 6379/tcp
After docker compose up -d api:
NAME STATUS PORTS
myapp-api-1 Up 5 seconds 0.0.0.0:3000->3000/tcp
myapp-postgres-1 Up 2 hours 5432/tcp # Still running!
myapp-redis-1 Up 2 hours 6379/tcp # Still running!
Multiple services at once
Restart several services together:
docker compose up -d web api worker
Common pitfall
Dependencies won’t start automatically with --no-deps:
# This won't start postgres if it's not running
docker compose up -d --no-deps web
# This ensures dependencies are running
docker compose up -d web
Pro tip
During development, an even faster solution exists - use docker compose up --watch for automatic hot reloading:
# Instead of manually restarting services
docker compose up --watch
# Files change → services automatically reload!
This enables hot reloading when your code changes. We’ll cover this powerful feature in detail in an upcoming post.
Performance impact
In our Docker Desktop development:
- Full restart (
down && up): ~45 seconds, loses all state - Single service restart: ~3 seconds, preserves everything
That’s 15x faster, plus no data loss or cache warming.
Stop restarting everything. Restart what changed. Your development speed will thank you.