Docker Compose Visualizer and Config Resolver
The configuration docker compose really runs, drawn as a diagram and checked.
Try before you buy.
- Free preview: the diagram at preview size (up to 640 px) with a watermark, every count, the first services and problems (up to 10) and resolved YAML lines (up to 20).
- Locked until you unlock it: download and copy.
- Unlock: Pro pass, ₹179 for 30 days, a one-time payment that never renews.
Ways to unlock shows how to get the full result.
Printing this result is locked in the free preview.
Resolved as you type, in your browser. Ctrl/⌘ + Enter resolves now.
Read with Compose’s .env rules: quotes, export, comments and ${VAR} expansion. Its values stay in this page.
More files
Add the files your compose.yaml names — compose.override.yaml, files in include or extends: file:, and env_files — with their path relative to the compose file (for example db/compose.yaml).
Diagram
Arrows point from a service to what it depends on: solid — started, green — healthy, dashed — completed successfully, dotted — links, volumes_from or network_mode. An orange border marks a service with warnings.
Findings
Resolved configuration
Services
| Service | Image or build | Published ports | Networks | Volumes | Depends on |
|---|
Variables
| Variable | In .env | Default | Required | First used in |
|---|
Locked in the free preview. Opens the ways to unlock this result.
Locked in the free preview. Batch runs unlock with a pass.
Locked in the free preview. Query results unlock with a pass.
About the Docker Compose Visualizer and Config Resolver
Paste a compose.yaml — and the .env file next to it — to see the configuration Docker Compose will really run, the way docker compose config prints it:
- Variables from the
.envfile interpolated, with${VAR:-default},${VAR:?error}and${VAR:+other}, unset variables reported, and literal$$kept. - **YAML anchors and
<<merge keys** expanded, andx-extension blocks shown. - **
extendsandincluderesolved, andcompose.override.yaml** merged on top with Compose’s merge rules,!resetand!overrideincluded — add the other files under More files. - Profiles applied: pick the active ones, or let
COMPOSE_PROFILESin the .env decide. - Short syntax made explicit: ports, volumes,
depends_on, secrets and devices in long form, commands split into words, sizes in bytes, durations in Go form, relative paths resolved and unused networks and volumes dropped.
A diagram shows each service with its image or build, published ports, volumes and networks, and arrows for depends_on (healthy, completed or started). The checks find what a schema cannot: host ports published twice, service_healthy on a service without a healthcheck, references to undefined networks, volumes, secrets or configs, dependency cycles, commands whose && Compose silently drops, numbers and dates YAML changes (ZIP: 01234 becomes 668), and security notes for privileged mode, host networking, a mounted Docker socket and secrets written in the file. Nothing is uploaded.
Without a pass the result is a free preview: the diagram at preview size under a MySmartCoPilot mark, every count with the first problems, and the first lines of the resolved YAML. The whole YAML and report, and the YAML, JSON, SVG, PNG and report files, unlock with a Pro pass.
How to use it
- Paste your
compose.yaml(or open it), and your.envif the file uses variables. Load example shows a project with a few typical problems. - If the file uses
extends: file:,include,env_fileor acompose.override.yaml, add those files under More files with their path relative to the compose file (for exampledb/compose.yaml). - Set the project folder to see absolute paths as Compose prints them, or leave it empty to keep paths relative. Choose the profiles to enable, or leave “from .env” to use
COMPOSE_PROFILES. - Read the diagram, the services table and the findings: errors are what Compose refuses or what fails when the containers start, warnings are risks, notes are advice. Each finding links Docker’s documentation.
- With a pass, or once this result is unlocked, copy or download the resolved YAML (or JSON), the diagram as SVG or PNG, and the report; the preview locks the copies and downloads.
Examples
image: "shop/web:${TAG:-dev}"
DATABASE_URL: postgres://shop:${POSTGRES_PASSWORD:?set it in .env}@db/shopimage: shop/web:1.4.2 (TAG=1.4.2 in .env) Without POSTGRES_PASSWORD: error while interpolating …: required variable POSTGRES_PASSWORD is missing a value: set it in .env
ports: - "127.0.0.1:8443:443"
ports:
- mode: ingress
host_ip: 127.0.0.1
target: 443
published: "8443"
protocol: tcpcommand: npm run migrate && npm start
command: [npm, run, migrate] — Compose splits the string into words and drops “&& npm start”. Use ["sh", "-c", "npm run migrate && npm start"].
Compose does not run a string command in a shell, and stops reading it at &&, |, ; or a redirection.
How close is it to docker compose config?
The resolver follows the Compose Specification and was checked against the output of docker compose config (Docker Compose 5.6) on dozens of projects: interpolation and .env quoting, anchors and merge keys, extends, include, override files with !reset and !override, profiles, the long forms of ports, volumes and dependencies, and its error messages. Attributes appear in Compose’s order, but the YAML is not promised to be identical byte for byte. YAML is read the way Compose’s parser reads it: yes and on stay text, while True becomes true, 0755 is an octal number and 2024-01-02 a date.
What the checks look at
Compose itself refuses undefined networks, volumes, secrets and configs, dependency cycles and services left out by profiles that others depend on — those findings repeat its message. The other checks find what only fails later: a host port published by two services (the second container cannot start), a fixed host port on a service with several replicas, condition: service_healthy on a service without a healthcheck, and network_mode: host with ports (Docker discards them). Security notes follow Docker’s documentation: a privileged container gets all capabilities and devices, the Docker socket gives control of the Docker daemon, and a published port is reachable from other machines unless it is bound to 127.0.0.1.
Limitations
- Files are read only from what you paste: a file named by include, extends or env_file that is not under More files is reported, not read.
- There is no shell environment: variables come from the .env file only, and a path starting with ~ stays as written.
- Full validation against the Compose JSON schema is left to the YAML validator; this page only reports attributes Compose does not know.
- Images are not pulled, so a HEALTHCHECK, USER or EXPOSE set by an image is not seen.
Privacy
Everything happens in your browser. What you enter or open here is not uploaded or stored by MySmartCoPilot.
Frequently asked questions
What do I get without a pass?
Without a pass, Docker Compose Visualizer and Config Resolver shows the diagram at preview size (up to 640 px) with a watermark, every count, the first services and problems (up to 10) and resolved YAML lines (up to 20). Until you unlock it, the result can’t be downloaded or copied. A Pro, Premium or Ultimate pass, a one-time payment that never renews, unlocks the full result. The pricing page lists the passes and their prices.
Why does my port or variable look different in the resolved file?
That is how Compose sees it. Ports are written in long form (8080:80 becomes target 80, published "8080"), numbers in environment become text (01234 is octal, so 668), and a literal $ is written $$ so that the output is itself a valid Compose file.
Which .env file does Compose use?
The .env in the project folder (the folder of the first Compose file) unless you pass --env-file; variables from your shell override it. Put yours in the .env box. An included project reads the .env of its own folder, which the including project’s variables override.
Does it support compose.override.yaml?
Yes. Add it under More files: it is merged over the main file like docker compose does when both are in the folder — mappings merged, lists added to, command replaced, ports and volumes kept one per target, and !reset and !override applied.
Is my file uploaded?
No. The files are read and resolved in your browser. The variables table hides the .env values until you choose to show them, and the report leaves them out.