The Devs Tools

Structure and Parsing: How to Convert and Validate Docker Run to Docker Compose Payloads

August 18, 2026 · The Devs Tools Team

A single docker run command is a convenient way to launch one container from the terminal, but it's also an imperative, one-off instruction — every flag has to be retyped correctly each time, and there's no durable record of exactly how a container was configured beyond shell history. docker-compose.yml, by contrast, is a declarative service definition: the same configuration expressed as structured YAML that can be checked into version control, reviewed in a pull request, and reliably reproduced with a single docker compose up. The two formats describe the same underlying container runtime options — published ports, mounted volumes, environment variables, container names, restart policies, and network attachments — but docker run expresses them as a flat sequence of CLI flags, while Compose organizes them into a structured services: block with clearly named keys. Translating a long, flag-heavy docker run command someone pasted into a Slack message or a README into proper Compose YAML is a common onboarding task for any team standardizing local development environments, and doing it by hand means carefully tracking which flag maps to which YAML key without dropping or misplacing any of them, especially when a command has a dozen or more flags chained together.

[!TIP] Need to turn a docker run command into a reusable docker-compose.yml file right now? Try our free, local Docker Run to Docker Compose Converter to parse and convert your command completely offline.


Mapping CLI Flags to Compose Keys

docker run -d --name my-api \
  -p 8080:80 \
  -v ./data:/app/data \
  -e NODE_ENV=production \
  --network backend \
  my-org/my-api:latest

Converts into the equivalent Compose service definition:

services:
  my-api:
    image: my-org/my-api:latest
    container_name: my-api
    ports:
      - "8080:80"
    volumes:
      - ./data:/app/data
    environment:
      - NODE_ENV=production
    networks:
      - backend
    restart: unless-stopped

1. Port and Volume Mappings

The -p host:container and -v host:container flags each become list entries under ports: and volumes: respectively, preserving the same host-to-container mapping order.

2. Environment Variables

Each -e KEY=VALUE flag becomes one entry in the environment: list, keeping variable assignments explicit and easy to review or template later.

3. Naming, Detachment, and Networking

--name becomes container_name:, the image reference becomes the image: key, and --network becomes an entry under networks:; the -d (detached) flag has no direct Compose equivalent since Compose services run detached by default.

Common Developer Use Cases

  • Standardizing local dev setups: converting ad hoc docker run commands from documentation into a shareable, version-controlled docker-compose.yml.
  • Multi-container orchestration prep: turning several individual docker run commands into services within one Compose file that can be networked together.
  • Onboarding: giving new team members a single docker compose up command instead of a list of CLI flags to run manually.

Conclusion

docker run and Compose YAML describe the same container configuration, just in imperative versus declarative form, and converting between them is mostly a matter of carefully mapping each CLI flag to its corresponding YAML key without dropping any along the way. A dedicated converter automates that mapping, turning a one-off terminal command into a clean, reusable Compose file instantly.