yamlintermediate

Docker Compose — Multi-Environment Override

Use Docker Compose override files for dev, staging, and production with shared base configuration.

yaml
# docker-compose.yml (base)
version: '3.9'

services:
  app:
    build: .
    environment:
      - NODE_ENV=production
    depends_on:
      - postgres

  postgres:
    image: postgres:16-alpine
    environment:
      POSTGRES_DB: myapp
    volumes:
      - pgdata:/var/lib/postgresql/data

volumes:
  pgdata:

---
# docker-compose.dev.yml (override for dev)
version: '3.9'
services:
  app:
    build:
      context: .
      target: development
    volumes:
      - .:/app
      - /app/node_modules
    environment:
      - NODE_ENV=development
      - DEBUG=app:*
    ports:
      - '3000:3000'
      - '9229:9229'  # Node.js debugger
    command: npm run dev

  postgres:
    ports:
      - '5432:5432'
    environment:
      POSTGRES_PASSWORD: devpass

---
# Usage:
# Dev:     docker compose -f docker-compose.yml -f docker-compose.dev.yml up
# Prod:    docker compose -f docker-compose.yml up -d
# Or use COMPOSE_FILE env var:
# export COMPOSE_FILE=docker-compose.yml:docker-compose.dev.yml
# docker compose up

Sponsored

DigitalOcean

Use Cases

  • Shared base config with environment-specific overrides
  • Hot reloading and debugging in dev containers
  • Consistent environments from local to production

Tags

Related Snippets

Similar patterns you can reuse in the same workflow.