Conversor de docker run para Docker Compose (e vice-versa)

Transforme um comando docker run num serviço do docker-compose.yml, ou um serviço do Compose de volta em docker run.

Exemplos:
Comandos em várias linhas com continuações \, aspas e formatos --flag=valor funcionam normalmente.
docker-compose.yml
services:
  db:
    image: postgres:16
    container_name: db
    restart: unless-stopped
    environment:
      POSTGRES_PASSWORD: change-me
      POSTGRES_DB: app
    volumes:
      - pgdata:/var/lib/postgresql/data
    ports:
      - "127.0.0.1:5432:5432"
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      interval: 10s
      retries: 5
volumes:
  pgdata:
    name: pgdata
Observações
  • -d / --detach removido: use "docker compose up -d" para rodar em segundo plano.
  • Volumes nomeados mantêm o nome exato ("name:") para que o Compose reutilize o volume criado pelo docker run, em vez de criar um novo e vazio "<projeto>_<volume>".

Roda inteiramente no seu navegador. Comandos e arquivos Compose, incluindo as senhas que estiverem neles, nunca são enviados a lugar nenhum. Ver todas as ferramentas grátis.

Encontrou um problema ou algo que poderia ser melhor? Lemos todas as mensagens e corrigimos rápido.

Este conversor de docker run para Docker Compose transforma um comando docker run, daqueles que você copia do README de um projeto, num serviço do docker-compose.yml: portas, volumes, variáveis de ambiente, redes, política de reinício, healthcheck, capabilities, devices, acesso a GPU e dezenas de outras opções. Ele também funciona ao contrário, transformando cada serviço de um arquivo Compose no comando docker run equivalente, para um teste rápido ou para um sistema sem Compose.

A conversão cuida dos detalhes que quebram implantações reais. As portas ficam entre aspas, porque o YAML 1.1 lê um 22:22 sem aspas como um número em base 60. Volumes nomeados mantêm o nome exato, para que o Compose reutilize os dados criados pelo docker run em vez de começar um “<projeto>_<volume>” vazio. $(pwd) vira um caminho relativo. Flags que só afetam a sessão da CLI, como -d e --rm, são descartadas com uma observação, e tudo o que não tem equivalente no Compose aparece como aviso, em vez de se perder sem aviso.

Como usar

  1. Cole um comando docker run na caixa da esquerda ou clique num exemplo. Comandos de várias linhas com barras invertidas funcionam.
  2. Leia o docker-compose.yml gerado à direita e confira as observações e avisos logo abaixo.
  3. Copie o YAML ou baixe-o como docker-compose.yml, coloque-o no diretório do projeto e rode docker compose up -d.
  4. Para fazer o caminho inverso, mude para “Compose → docker run”, cole um arquivo Compose e copie o comando de cada serviço.

Perguntas frequentes

Qual é a diferença entre docker run e docker compose?

O docker run inicia um contêiner a partir de opções na linha de comando. O Docker Compose descreve um ou mais contêineres, suas redes e volumes num arquivo YAML e os inicia juntos com docker compose up. O Compose é mais fácil de manter no controle de versão, de revisar e de rodar de novo de forma idêntica, e serviços do mesmo projeto Compose conseguem se comunicar pelo nome do serviço.

Ainda preciso da linha version: no docker-compose.yml?

Não. A chave version de nível superior está obsoleta na Compose Specification usada pelo Docker Compose v2, e as versões atuais mostram um aviso de que ela é ignorada. Este conversor a omite. Hoje os arquivos costumam se chamar compose.yaml, embora docker-compose.yml continue sendo lido.

Por que os dados do meu volume sumiram depois de mudar para o Compose?

O Compose acrescenta o nome do projeto como prefixo aos volumes nomeados, então um volume chamado pgdata vira myproject_pgdata, que é um volume novo e vazio. Para reutilizar o volume que o docker run criou, declare-o no nível superior com name: pgdata (este conversor faz isso) ou marque-o como external: true. Bind mounts (caminhos que começam com / ou ./) não são afetados.

O que acontece com -d, -it e --rm?

O -d é uma característica de como você inicia os contêineres, então use docker compose up -d. -i e -t viram stdin_open: true e tty: true. O --rm não tem equivalente por serviço: docker compose down remove os contêineres, e docker compose run --rm existe para comandos avulsos.

Como as opções de GPU são convertidas?

--gpus all vira uma reserva de dispositivo em deploy.resources.reservations.devices com driver: nvidia, count: all e capabilities: [gpu], que é a forma documentada para o Docker Compose. GPUs específicas (--gpus '"device=0,1"') viram device_ids. Você continua precisando do NVIDIA Container Toolkit instalado no host.

Meu comando é enviado para um servidor?

Não. A análise e a conversão acontecem no seu navegador, então variáveis de ambiente, senhas e hostnames internos do comando nunca saem da sua máquina. Mesmo assim, trate um arquivo Compose que contém segredos como um arquivo de senhas: mova-os para um env_file listado no .gitignore.

Flags do docker run e suas chaves no Compose

• -p 8080:80 → ports: ["8080:80"] · --expose → expose

• -v /host:/ctr ou -v name:/ctr → volumes · --mount → volumes em sintaxe longa · --tmpfs → tmpfs

• -e KEY=value → environment · --env-file → env_file · -l / --label → labels

• --name → container_name · -h → hostname · -u → user · -w → working_dir

• --restart → restart · --network → networks ou network_mode (host, none, container:…) · --network-alias, --ip → aliases e ipv4_address por rede

• --entrypoint → entrypoint · argumentos depois da imagem → command

• --health-cmd/-interval/-timeout/-retries/-start-period → healthcheck · --no-healthcheck → healthcheck.disable

• --cap-add/--cap-drop → cap_add/cap_drop · --device → devices · --privileged, --read-only, --init → os mesmos nomes

• -m / --memory → mem_limit · --cpus → cpus · --shm-size → shm_size · --ulimit → ulimits · --sysctl → sysctls

• --log-driver/--log-opt → logging · --add-host → extra_hosts · --dns → dns · --gpus → deploy.resources.reservations.devices

Depois de converter: transforme em um projeto Compose de verdade

Uma conversão um para um é um ponto de partida. Quando vários contêineres ficam num só arquivo, troque --link e IPs fixos de contêineres por nomes de serviço (o app acessa o banco de dados em db:5432), acrescente depends_on com condition: service_healthy para que o app espere o healthcheck do banco e remova o container_name, a menos que algo fora do Compose precise de um nome fixo, já que ele impede escalar o serviço. Mova as senhas do environment para um arquivo .env ou para secrets do Compose e mantenha esse arquivo fora do Git.

Ferramentas grátis relacionadas

  • Calculadora de sub-rede — Rede, broadcast, faixa de hosts e máscara para qualquer CIDR; divida redes com VLSM, expanda IPv6 e encontre faixas sobrepostas.
  • Calculadora chmod — Marque as caixas de Leitura, Escrita e Execução para obter o modo octal e o comando chmod, ou decodifique 755, 644 e rwxr-xr-x.
  • Gerador de .gitignore — Combine modelos de .gitignore para linguagens, frameworks, editores e sistemas operacionais em um único arquivo limpo.
  • Formatador de JSON — Formate, minifique e valide JSON, com erros de parsing localizados por linha e coluna. No seu navegador, sem upload.
  • Gerador de expressões cron — Monte um agendamento cron com menus ou cole um pronto, leia-o em português e veja as próximas 10 execuções no seu fuso e em UTC. Grátis, no navegador.