Convertitore da docker run a Docker Compose (e viceversa)

Trasforma un comando docker run in un servizio docker-compose.yml, o un servizio Compose di nuovo in docker run.

Esempi:
Vanno bene comandi su più righe con continuazioni \, virgolette e forme --flag=valore.
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
Note
  • -d / --detach rimosso: usa "docker compose up -d" per l'esecuzione in background.
  • I volumi con nome mantengono il loro nome esatto ("name:"), così Compose riutilizza il volume creato da docker run invece di crearne uno nuovo e vuoto "<progetto>_<volume>".

Funziona interamente nel tuo browser. I comandi e i file Compose, comprese le eventuali password, non vengono mai inviati altrove. Sfoglia tutti gli strumenti gratuiti.

Hai trovato un problema o qualcosa che potrebbe andare meglio? Leggiamo ogni messaggio e sistemiamo le cose in fretta.

Questo convertitore da docker run a Docker Compose trasforma un comando docker run, come quelli che si copiano dal README di un progetto, in un servizio docker-compose.yml: porte, volumi, variabili d'ambiente, reti, criterio di riavvio, healthcheck, capability, dispositivi, accesso alla GPU e decine di altre opzioni. Funziona anche al contrario, trasformando ogni servizio di un file Compose nel comando docker run equivalente, per una prova veloce o per un sistema senza Compose.

La conversione è attenta ai dettagli che rompono i deployment reali. Le porte vanno tra virgolette, perché YAML 1.1 legge un 22:22 senza virgolette come un numero in base 60. I volumi con nome mantengono il loro nome esatto, così Compose riusa i dati creati da docker run invece di partire da un “<progetto>_<volume>” vuoto. $(pwd) diventa un percorso relativo. I flag che riguardano solo la sessione della CLI, come -d e --rm, vengono scartati con una nota, e tutto ciò che non ha un equivalente in Compose viene elencato come avviso invece di andare perso senza dirlo.

Come si usa

  1. Incolla un comando docker run nella casella a sinistra oppure fai clic su un esempio. Vanno bene anche i comandi su più righe con le barre rovesciate.
  2. Leggi il docker-compose.yml generato a destra e controlla le note e gli avvisi sotto.
  3. Copia lo YAML o scaricalo come docker-compose.yml, mettilo nella directory del progetto ed esegui docker compose up -d.
  4. Per la direzione opposta, passa a “Compose → docker run”, incolla un file Compose e copia il comando per ogni servizio.

Domande frequenti

Che differenza c'è tra docker run e docker compose?

docker run avvia un container a partire dalle opzioni sulla riga di comando. Docker Compose descrive uno o più container, le loro reti e i loro volumi in un file YAML e li avvia insieme con docker compose up. Compose è più facile da tenere sotto controllo di versione, da rivedere e da rieseguire in modo identico, e i servizi dello stesso progetto Compose possono raggiungersi tra loro tramite il nome del servizio.

Serve ancora la riga version: in docker-compose.yml?

No. La chiave version di primo livello è obsoleta con la Compose Specification usata da Docker Compose v2, e le versioni attuali stampano un avviso che viene ignorata. Questo convertitore la omette. Oggi i file si chiamano di solito compose.yaml, anche se docker-compose.yml viene ancora letto.

Perché i dati del mio volume sono spariti dopo il passaggio a Compose?

Compose aggiunge il nome del progetto come prefisso ai volumi con nome, quindi un volume chiamato pgdata diventa myproject_pgdata, che è un volume nuovo e vuoto. Per riusare il volume creato da docker run, dichiaralo al primo livello con name: pgdata (questo convertitore lo fa), oppure segnalo come external: true. I bind mount (percorsi che iniziano con / o ./) non sono interessati.

Cosa succede a -d, -it e --rm?

-d riguarda il modo in cui avvii i container, quindi usa docker compose up -d. -i e -t diventano stdin_open: true e tty: true. --rm non ha un equivalente per singolo servizio: docker compose down rimuove i container, ed esiste docker compose run --rm per i comandi una tantum.

Come vengono convertite le opzioni GPU?

--gpus all diventa una prenotazione di dispositivi sotto deploy.resources.reservations.devices con driver: nvidia, count: all e capabilities: [gpu], che è la forma documentata per Docker Compose. Le GPU specifiche (--gpus '"device=0,1"') diventano device_ids. Sull'host serve comunque l'NVIDIA Container Toolkit installato.

Il mio comando viene inviato a un server?

No. Analisi e conversione avvengono nel browser, quindi variabili d'ambiente, password e hostname interni presenti nel comando non lasciano mai il tuo computer. Detto questo, tratta un file Compose che contiene segreti come un file di password: spostali in un env_file elencato nel .gitignore.

I flag di docker run e le relative chiavi Compose

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

• -v /host:/ctr o -v nome:/ctr → volumes · --mount → volumes in sintassi estesa · --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 o network_mode (host, none, container:…) · --network-alias, --ip → alias e ipv4_address per rete

• --entrypoint → entrypoint · argomenti dopo l'immagine → 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 → gli stessi nomi

• -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

Dopo la conversione: trasformalo in un vero progetto Compose

Una conversione uno a uno è un punto di partenza. Quando più container convivono in un unico file, sostituisci --link e gli IP dei container scritti a mano con i nomi dei servizi (l'app raggiunge il database su db:5432), aggiungi depends_on con condition: service_healthy perché l'app aspetti l'healthcheck del database ed elimina container_name a meno che qualcosa al di fuori di Compose non richieda un nome fisso, perché impedisce di scalare un servizio. Sposta le password da environment in un file .env o nei secret di Compose, e tieni quel file fuori da Git.

Strumenti gratuiti correlati

  • Calcolatore di subnet — Rete, broadcast, intervallo di host e maschera per qualsiasi CIDR; suddividi reti con VLSM, espandi indirizzi IPv6 e trova intervalli sovrapposti.
  • Calcolatore chmod — Seleziona le caselle di lettura, scrittura ed esecuzione per ottenere il modo ottale e il comando chmod, oppure decodifica 755, 644 e rwxr-xr-x.
  • Generatore di .gitignore — Combina template .gitignore per linguaggi, framework, editor e sistemi operativi in un unico file pulito.
  • Formattatore JSON — Formatta, minifica e valida JSON, con gli errori di parsing localizzati per riga e colonna. Nel tuo browser, senza upload.
  • Generatore di espressioni cron — Crea una pianificazione cron con i menu a tendina o incollane una, leggila in parole semplici e vedi le prossime 10 esecuzioni nel tuo fuso orario e in UTC. Gratis, nel browser.