Skip to content

What is MultiDocker?

MultiDocker runs multiple docker-compose projects in parallel on macOS — without editing the original compose files and without fighting over ports 80, 443, 3306 and friends.

Every project gets its own real hostname over HTTPS, for example https://aurora.coding9.test, and several projects can run side by side at the same time.

Local development stacks all want the same ports. Start two Shopware projects and the second one fails to bind :80. Publish a database on :3306 twice and one of them loses. The usual workarounds — hand-editing every docker-compose.yml, juggling .env port numbers, or only ever running one project at a time — are tedious and easy to get wrong.

MultiDocker removes the conflict entirely: host ports are stripped from every project, a single shared reverse proxy owns 80/443, and each project is reached by hostname instead of by port.

MultiDocker is made of three cooperating parts:

  1. Edge stack — one central Traefik v3 reverse proxy plus Mailcatcher, dnsmasq and a docker-socket-proxy, all on a shared Docker network called multi-docker-edge. Traefik owns ports 80/443 and routes <host>.<base-domain> to the right project container.
  2. Override engine — for each project a <name>.override.yml is generated under ~/.config/multi-docker/overrides/. It removes host port bindings, attaches the containers to the edge network and adds Traefik labels for hostname-based routing. Your original compose file is never modified.
  3. mdocker CLI — a single command that ties it together. It calls docker compose with COMPOSE_FILE=<original>:<override>, so the override is layered on top of the untouched original.

A native macOS app (SwiftUI) wraps the CLI as a graphical front-end — see The macOS App.

  • Parallel projects. Run as many stacks at once as your machine can handle.
  • Real HTTPS domains. Trusted certificates via mkcert, no browser warnings.
  • Untouched compose files. All customization lives in generated overrides.
  • Host access to databases. Reach a project’s database from TablePlus or the CLI.
  • Batteries included. Mail catching, per-project git status, public demo tunnels, database snapshots and AI terminal sessions.