Docker Compose Multi-Container

Advanced ⏱ 40 minutes 📅 Updated Feb 2026

Production-grade Docker Compose setup with PostgreSQL, Redis caching, and monitoring.

🏗️ Architecture

  • openclaw - Main application
  • postgres - Persistent data storage
  • redis - Caching layer
  • ollama - Local LLM (optional)
  • nginx - Reverse proxy with SSL
1

Complete docker-compose.yml

yaml
version: '3.8'

services:
  openclaw:
    image: openclaw/openclaw:latest
    container_name: openclaw
    restart: unless-stopped
    depends_on:
      - postgres
      - redis
    environment:
      # OPENAI_API_KEY=${OPENAI_API_KEY} # Uncomment if using Cloud LLM
      - DATABASE_URL=postgresql://openclaw:${DB_PASSWORD}@postgres:5432/openclaw
      - REDIS_URL=redis://redis:6379
    volumes:
      - openclaw-data:/root/.openclaw
      - ./workspace:/workspace
    networks:
      - openclaw-network
    ports:
      - "8080:8080"

  postgres:
    image: postgres:16-alpine
    container_name: openclaw-db
    restart: unless-stopped
    environment:
      - POSTGRES_USER=openclaw
      - POSTGRES_PASSWORD=${DB_PASSWORD}
      - POSTGRES_DB=openclaw
    volumes:
      - postgres-data:/var/lib/postgresql/data
    networks:
      - openclaw-network
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U openclaw"]
      interval: 10s
      timeout: 5s
      retries: 5

  redis:
    image: redis:7-alpine
    container_name: openclaw-cache
    restart: unless-stopped
    volumes:
      - redis-data:/data
    networks:
      - openclaw-network
    command: redis-server --appendonly yes

  ollama:
    image: ollama/ollama:latest
    container_name: openclaw-llm
    restart: unless-stopped
    volumes:
      - ollama-data:/root/.ollama
    networks:
      - openclaw-network
    ports:
      - "11434:11434"
    # GPU support (uncomment for NVIDIA)
    # deploy:
    #   resources:
    #     reservations:
    #       devices:
    #         - driver: nvidia
    #           count: all
    #           capabilities: [gpu]

networks:
  openclaw-network:
    driver: bridge

volumes:
  openclaw-data:
  postgres-data:
  redis-data:
  ollama-data:

Create .env file

bash
OPENAI_API_KEY=your-openai-api-key
DB_PASSWORD=your-secure-database-password

📋 Management Commands

bash
# Start all services
docker-compose up -d

# View logs
docker-compose logs -f

# Stop all services
docker-compose down

# Remove all data (fresh start)
docker-compose down -v

# Update images
docker-compose pull && docker-compose up -d

# Enter openclaw container
docker-compose exec openclaw /bin/bash

# Backup database
docker-compose exec postgres pg_dump -U openclaw openclaw > backup.sql

# Pull Ollama model
docker-compose exec ollama ollama pull llama2
🎉

Full Stack Running!

Your production Docker Compose stack is ready at http://localhost:8080