Files
Bill Ballou e769526b13 Initial commit: docker-compose-config skill
Add skill for Docker Compose configuration management with:
- Multi-host environment structure with per-hostname overrides
- External volume mount patterns with env variable substitution
- Reverse proxy network configuration for SWAG integration
- Reference docs for examples and network topology

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-30 16:39:42 -05:00

4.8 KiB

Docker Compose Network Configuration

Network Topology

┌─────────────────────────────────────────────────────────────┐
│                     reverse_proxy network                    │
│  (attachable, shared across all projects)                   │
│                                                             │
│  ┌─────────┐  ┌─────────────┐  ┌─────────────┐            │
│  │  SWAG   │  │ immich-srv  │  │  grist-srv  │  ...       │
│  │ :443/80 │  │   :2283     │  │   :8484     │            │
│  └─────────┘  └─────────────┘  └─────────────┘            │
└─────────────────────────────────────────────────────────────┘
         │              │                │
         │              │                │
    External        Internal         Internal
    Traffic         Services         Services

┌───────────────────┐    ┌───────────────────┐
│   immich_default  │    │   grist_default   │
│                   │    │                   │
│  ┌─────────────┐  │    │  ┌─────────────┐  │
│  │ immich-ml   │  │    │  │   grist     │  │
│  └─────────────┘  │    │  └─────────────┘  │
│  ┌─────────────┐  │    │  ┌─────────────┐  │
│  │   redis     │  │    │  │  postgres   │  │
│  └─────────────┘  │    │  └─────────────┘  │
│  ┌─────────────┐  │    └───────────────────┘
│  │  postgres   │  │
│  └─────────────┘  │
└───────────────────┘

Network Types

1. Project Default Network

Automatically created by Compose. Services within same project communicate here.

services:
  app:
    networks:
      - default  # Implicit, connects to <project>_default

  database:
    networks:
      - default  # Same network, can reach 'app' by service name

2. Reverse Proxy Network

Shared external network for services needing reverse proxy access.

services:
  web-app:
    networks:
      - default        # Internal communication
      - reverse_proxy  # Accessible by SWAG

networks:
  reverse_proxy:
    name: reverse_proxy
    attachable: true

3. Host Network Mode

For services requiring direct host network access (e.g., Plex discovery):

services:
  plex:
    network_mode: host
    # No 'ports' mapping needed - uses host ports directly

Network Configuration Patterns

Standard Web Service

services:
  myapp:
    networks:
      - default
      - reverse_proxy

networks:
  reverse_proxy:
    name: reverse_proxy
    attachable: true

Internal-Only Service (Database)

services:
  postgres:
    networks:
      - default
    # No reverse_proxy - not externally accessible

Service with Multiple Networks

services:
  api-gateway:
    networks:
      - default
      - reverse_proxy
      - monitoring

networks:
  reverse_proxy:
    name: reverse_proxy
    attachable: true
  monitoring:
    name: monitoring
    attachable: true

Service Discovery

Services on the same network can reach each other by container name:

services:
  app:
    container_name: myapp_server
    environment:
      REDIS_HOST: myapp_redis  # Uses container_name
      DB_HOST: myapp_postgres

  redis:
    container_name: myapp_redis

  database:
    container_name: myapp_postgres

External Network Declaration

When connecting to pre-existing external networks:

networks:
  reverse_proxy:
    external: true
    name: reverse_proxy

vs creating if not exists:

networks:
  reverse_proxy:
    name: reverse_proxy
    attachable: true

SWAG Proxy Configuration

Services on reverse_proxy network are accessible to SWAG at their container name and internal port:

Service Container Name Internal URL
Immich immich_server http://immich_server:2283
Grist grist http://grist:8484

SWAG nginx config example:

upstream_app immich_server;
upstream_port 2283;