Docker Compose Builder

A visual builder for multi-service Compose files: define each service, wire up dependencies and named volumes, and copy or download the result as docker-compose.yml.

Assemble a docker-compose.yml without hand-writing YAML or fighting the indentation. Add each service, point it at an image like nginx:latest or postgres:16, then fill in the ports, environment variables, volumes, and which other services it waits on. This docker compose generator rewrites the file live as you edit and pins it to the Compose Spec (version 3.9), so what you copy runs with docker compose up. When you want a working stack to edit instead of a blank file, load the nginx + postgres or node + redis preset and change it from there.

Quick start
Services
webnginx:latest
dbpostgres:16
docker-compose.yml

How it works

  1. 1

    Add your services

    Click Add service for every container in the stack. Give each one a name (that becomes its key under services:) and an image reference such as redis:7-alpine or your own build tag.

  2. 2

    Wire up ports, env, and volumes

    Fill the host:container port rows, key=value environment pairs, and volume mounts. Tick Depends on to make a service start after another, pick a restart policy, and add any command override.

  3. 3

    Copy the generated file

    The right pane rebuilds docker-compose.yml on every keystroke. Copy it or download the file, drop it in your project folder, and run docker compose up -d.

Instant & 100% private — nothing is uploaded

Everything runs locally in your browser. Your code, text and files are processed on your own device and are never sent to a server — so there are no upload waits, no size limits from us, and nothing is ever stored or logged.

Frequently asked questions

How do I generate a docker-compose.yml file?
Add a service named web, set its image to nginx:latest, and add a port row of 8080 to 80. The builder emits: services: web: image: nginx:latest ports: - "8080:80" Copy that block and run docker compose up in the same directory.
What is the difference between the port host and container fields?
The container field is the port your app listens on inside the container; the host field is the port opened on your machine. A row of 8080:80 maps localhost:8080 to the container's port 80. Leave the host blank and Docker publishes the container port on a random free host port.
Does depends_on wait for the database to be ready?
No. depends_on only sets start order, so Postgres starts before your app but may not be accepting connections yet. For real readiness add a healthcheck or retry logic in your app code; the builder writes the start-order dependency for you when you tick Depends on.
Which Compose file version does the output use?
It pins version: "3.9", a widely supported Compose Spec revision. Any named volumes and networks you add show up at the top level (for example volumes: pgdata:) so your services can mount them by name.