Docker Compose Builder
Compose files are mostly boilerplate you half-remember. Add your services, wire up ports and volumes, and copy out valid YAML without fighting indentation.
Runs entirely in your browser. Nothing you paste is uploaded.
Add Service
docker-compose.yml
About the Docker Compose Builder
The generated file targets the Compose Specification, which is what modern docker compose reads. The obsolete top-level version: key is deliberately omitted — it has been ignored since Compose v2 and only produces warnings.
Port mappings follow HOST:CONTAINER. Binding to 127.0.0.1:8080:80 instead of 8080:80 keeps a service reachable only from the host, which is what you want for anything sitting behind a reverse proxy.
Frequently asked questions
Do I still need the version key?
No. Compose v2 ignores it and warns when it is present. The Compose Specification dropped it entirely.
What is the difference between a named volume and a bind mount?
A bind mount (./data:/data) maps a host path and is great for development. A named volume (data:/data) is managed by Docker, survives container recreation, and is the right default for databases in production.
How do I keep secrets out of the compose file?
Reference them as ${VAR} and put the values in a .env file that is gitignored, or use Docker secrets. Never commit a compose file with a real password in it.