🐳 Docker Compose Visualizer
Turn any docker-compose.yml into an interactive architecture diagram — with a dependency graph, startup order and a security & best-practice audit. Runs entirely in your browser.
No compose file yet
Paste a docker-compose.yml, drop a file, or load one of the samples to see the architecture.
About the Docker Compose Visualizer
A docker-compose.yml file describes an entire system — services, images, ports, volumes, networks and the order things must boot in — but it describes it as a flat list. Once a stack grows past three or four services, understanding how they actually fit together means scrolling up and down and holding the graph in your head. This tool renders that graph for you: paste the file and get an interactive architecture diagram, the real startup order, and a list of the mistakes that most often bite in production.
Everything runs client-side in JavaScript. Your compose file — which frequently contains database credentials, internal hostnames and API keys — is never uploaded, stored or logged.
What the analyzer checks
🔓 Exposed databases
Flags Postgres, MySQL, MongoDB, Redis and friends publishing ports to all interfaces instead of staying on the internal network.
🔑 Hardcoded credentials
Finds passwords, tokens and API keys written as literals — and calls out well-known weak values like postgres or admin.
🔁 Circular dependencies
Detects depends_on cycles that stop Compose resolving a startup order at all.
🩺 Missing healthchecks
Warns when a service others wait on has no healthcheck — the usual cause of "connection refused" on boot.
⚓ Port conflicts
Catches two services publishing the same host port, where only the first to start will bind.
💾 Ephemeral data
Highlights databases with no volume mounted, whose data disappears on docker compose down.
Frequently Asked Questions
Is my docker-compose.yml uploaded anywhere?
No. Parsing, analysis and diagram rendering all happen in your browser using JavaScript. The file is never sent to a server, stored or logged — you can confirm this by watching the network tab while you paste.
Which Docker Compose versions are supported?
The Compose Specification (v2/v3 style files with a top-level services key) as well as legacy v1 files that declare services at the top level. Both short and long syntax for ports, volumes and depends_on are handled, along with YAML anchors and aliases.
How are ${VARIABLE} placeholders handled?
Variables are resolved using their inline default when one is given, for example ${POSTGRES_PORT:-5432}. Without a default the placeholder is left visible so you can see exactly which values come from your .env file. Every variable found is listed in the summary.
What does the startup order show?
It is a topological sort of your depends_on graph, grouped into waves. Services in the same wave have no dependency between them and start in parallel. If a cycle exists, the tool reports it as an error because Compose cannot resolve an order.
Why does it warn about depends_on without a healthcheck?
depends_on only waits for a container to start, not for the process inside to be ready to accept connections. That is the single most common cause of 'connection refused' errors on boot. Adding a healthcheck and using condition: service_healthy makes the wait meaningful.
Can I share a diagram with my team?
Yes. Click Share link and the compose file is encoded into the URL itself — nothing is stored on a server. Anyone who opens the link sees the same diagram. You can also export the diagram as SVG or PNG.