Zum Inhalt springen

The Edge Stack

Dieser Inhalt ist noch nicht in deiner Sprache verfügbar.

The edge stack is the shared foundation every project plugs into. It boots independently of any project and runs as its own compose project named multi-docker-edge on the external docker network of the same name. Every project container joins that network so a single Traefik can route to all of them.

Service Image Host ports Role
traefik traefik:v3.5 127.0.0.1:80, 127.0.0.1:443 TLS-terminated reverse proxy. Discovers containers via the docker provider (through docker-proxy). Dashboard at https://traefik.<base-domain>.
mailcatcher dockage/mailcatcher:0.9.0 none SMTP catch-all at mailcatcher:1025. Web UI at https://mail.<base-domain>.
dns 4km3/dnsmasq:2.90-r3 127.0.0.1:53/udp+tcp Answers *.<base-domain> with 127.0.0.1, paired with the macOS resolver.
docker-proxy nginx:1.30-alpine none Strips the /v1.24/ version prefix from Docker-API requests so Traefik 3 can talk to OrbStack.

All four use restart: unless-stopped, and every host port binds to loopback only — nothing on the edge stack is exposed to your LAN.

  1. Your browser resolves aurora.coding9.test to 127.0.0.1 (via dnsmasq + the macOS resolver).
  2. It connects to Traefik on 127.0.0.1:443, which terminates TLS with the mkcert wildcard certificate.
  3. Traefik matches the Host(...) rule from the labels that the generated override attached to your container.
  4. It forwards the request over the multi-docker-edge network to the container’s internal port.

Traefik runs default-deny (exposedByDefault: false), so a container is only routed when its override sets:

  • traefik.enable=true — opt-in per container.
  • traefik.docker.network=multi-docker-edge — tells Traefik which network to use when a container is on several.
  • A router rule from the {{hosts_rule}} substitution.

You never write these labels by hand — the profile render engine generates them.

Projects should point their SMTP at mailcatcher:1025 (the container hostname on the edge network). The shopware-dockware profile wires this automatically via MAILER_DSN and friends; other stacks set it themselves. All captured mail shows up at https://mail.<base-domain>. See Catching Outgoing Mail.

engine/render-edge.sh regenerates ~/.config/multi-docker/edge.override.yml before every edge command, adding one --address=/<bd>/127.0.0.1 argument to dnsmasq per configured base domain — so every domain in BASE_DOMAINS resolves. See Multiple Base Domains.

If edge up recreates the edge network on a subnet mismatch, attached project containers get detached — and a plain restart won’t fix it (no re-render, no re-attach). Use mdocker cycle for the robust sequence: stop running projects → edge down + upup <name> --auto-remap-ports so everything re-attaches to the fresh network.