RunLocalTools

Docker Compose Visualizer — Validate & Diagram Your Stack, Free & Local

Paste a docker-compose.yml and get instant validation plus an interactive diagram of how your services, networks, and volumes connect. 100% client-side, nothing uploaded.

What it does

Paste or drop a docker-compose.yml file and get two things immediately: a validation pass that catches common mistakes before you run docker compose up, and an interactive diagram showing how your services depend on each other, which networks they share, and which volumes they mount.

How it works

The file is parsed as YAML in your browser, then checked against a set of compose-specific rules: services missing both an image and a build, a depends_on pointing at a service that doesn’t exist, two services publishing the same host port, malformed port or volume syntax, and circular dependency chains. Services running privileged: true or network_mode: host are flagged separately as security-relevant, since those loosen container isolation.

The diagram lays services out in layers based on their depends_on chain — a service with no dependencies sits on the left, and everything that depends on it (directly or indirectly) sits to the right — so the flow of the stack reads left to right. Networks and named volumes get their own nodes so you can see at a glance which services actually share a network or a volume, not just which ones are declared in the same file. You can drag any node to rearrange the layout, scroll to zoom, and click a service to see its full raw configuration.

How to use it

  1. Paste your docker-compose.yml, or drop the file onto the page.
  2. Review the validation panel — errors (things that will break) are shown separately from warnings (things worth a second look).
  3. Explore the diagram: drag nodes to rearrange, click a service for its full config, use “Fit to screen” if it gets away from you.
  4. Export the diagram as a PNG or SVG image, or copy it as Mermaid syntax to paste into a README or wiki page.

Before deploying, it’s also worth running your .env file through the env validator separately — this tool checks compose structure, not the contents of an external .env file. If you’re comparing two versions of the same compose file to see what changed before a deploy, the diff tool will highlight exactly that.

What gets checked

  • Structural validity: valid YAML, a non-empty services: block, each service resolvable to an image or build.
  • Cross-references: depends_on targets that exist, no duplicate service names, no circular dependency chains.
  • Conflicts: two services trying to publish the same host port.
  • Shape: port and volume entries that don’t match expected host:container syntax.
  • Security-relevant settings: privileged: true, network_mode: host.
  • Environment variable references (${VAR}) with no default value and no matching entry in that service’s own environment: block — a common source of “works on my machine” surprises.

Limitations

  • This validates the structure of your compose file, not runtime behavior — it won’t catch a bad image tag or an application-level misconfiguration.
  • Environment variable checking only looks at variables actually referenced inside the compose file itself; it can’t see your shell environment or an external .env file’s contents.
  • Very large compose files (dozens of services) may need some manual rearranging after the automatic layout for a fully clean diagram.

FAQ

Does my compose file get uploaded anywhere? No — parsing, validation, and diagramming all happen in your browser. Nothing is sent to a server.

Does it support both Compose v2 and v3 syntax? Yes — the validator handles the common structural differences between versions, including both list-form and map-form depends_on.

Can I export the diagram to put in documentation? Yes — download it as a PNG or SVG image, or copy it as Mermaid diagram syntax, which renders natively on GitHub, GitLab, and most wikis.

Why does it flag privileged: true or network_mode: host? Both settings loosen the normal isolation Docker gives a container — privileged grants near-full host access, and network_mode: host shares the host’s network stack directly. Neither is inherently wrong, but they’re worth a second look before shipping.

What if my compose file has a real circular dependency? It’ll be flagged as an error and the affected services will still be drawn, just without a clean left-to-right ordering, since a true cycle has no single “first” service.

Does it check that referenced Docker images actually exist? No — that would require a network request to a registry, which this tool intentionally never makes. It checks the file’s structure and internal consistency only.