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

Add services to generate your 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.