Paste a docker-compose.yml. Get a plain-English explanation of every setting, warnings for risky ones, and a diagram of how your services connect. Parsed in your browser — nothing is uploaded.
Runs pg_isready -U app -d app to check the container is healthy every 10s (timeout 5s, 5 retries).
In short: paste a compose file and this page explains each key using your real values, flags common security mistakes such as privileged containers and databases published on every interface, and draws the service graph. It runs entirely in your browser.
What each part of a compose file does
A compose file describes an application as a set of containers. The parts you will see most:
services: one entry per container. Each is either an image (pulled from a registry) or a build (built from a local Dockerfile).
ports: host:container mappings. "8080:80" publishes container port 80 on every host interface; "127.0.0.1:8080:80" keeps it reachable from the host only.
volumes: a named volume is managed by Docker and survives the container; a bind mount (./data, /etc/...) maps a host path in directly.
environment: variables passed to the container. ${VAR} is interpolated by Compose from your shell or a .env file before the container starts.
depends_on: start order. Without a healthcheck condition it waits for the container to start, not for the service inside to be ready.
networks: which private networks a service joins. Services on the same network reach each other by service name.
version: obsolete. The Compose Specification ignores it, and docker compose warns if it is present.
Common Docker Compose security mistakes
These are the settings the explainer warns about most often, with the safer alternative for each:
privileged: true gives the container nearly full host access. Drop it and add only the specific capability you need.
Mounting /var/run/docker.sock hands over control of the Docker daemon, which is effectively root on the host. Use a socket proxy with limited permissions, or avoid the mount.
network_mode: host removes network isolation. Publish only the ports you need on a user-defined network.
Hardcoded secrets in environment: end up in git history. Use secrets: or an untracked .env file, and rotate any value that was committed.
Databases published on 0.0.0.0 are reachable from the network. Bind to 127.0.0.1, or do not publish the port and let other services connect over the compose network.
The :latest tag makes builds unrepeatable and can pull in unreviewed changes. Pin a version, or a digest for production.
Questions about the explainer
Is my compose file uploaded anywhere?
No. The file is parsed and analysed in your browser with JavaScript. Nothing is sent to a server, and there is no AI call in this tool.
Which Compose versions does it support?
The Compose Specification, which is what docker compose v2 uses. The top-level version: key is obsolete and ignored, so older v2/v3 files still parse.
Does it run my containers?
No. It only reads the YAML. It never pulls images, starts containers or contacts a Docker daemon.
What do the warnings mean, and are they complete?
Warnings come from a checklist of 14 common misconfigurations: privileged mode, docker.sock mounts, pid: host, dangerous cap_add entries, host networking, hardcoded secrets, sensitive bind mounts, unconfined seccomp/AppArmor, datastores exposed on all interfaces, running as root, :latest image tags, and missing healthchecks, restart policies or resource limits. It is a quick checklist, not a full audit. To review your whole repository — code, secrets and infrastructure config — run a full OpenRouting scan.
Can I export the diagram?
Yes. The service diagram can be exported as SVG or PNG.
Does it resolve .env files, extends or multiple compose files?
No. It analyses the single file you paste and shows ${VAR} references as written. It does not read .env, follow extends or include, or merge override files.