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.
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
- -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
- 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.
- Leggi il docker-compose.yml generato a destra e controlla le note e gli avvisi sotto.
- Copia lo YAML o scaricalo come docker-compose.yml, mettilo nella directory del progetto ed esegui docker compose up -d.
- 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.