Convertisseur docker run vers Docker Compose (et inversement)

Transformez une commande docker run en service docker-compose.yml, ou un service Compose en commande docker run.

Exemples :
Les commandes sur plusieurs lignes avec continuations \, les guillemets et les formes --flag=valeur sont acceptés.
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
Remarques
  • -d / --detach supprimé : utilisez « docker compose up -d » pour l’exécuter en arrière-plan.
  • Les volumes nommés gardent leur nom exact (« name: ») afin que Compose réutilise le volume créé par docker run au lieu d’en créer un nouveau, vide, « <project>_<volume> ».

Tout se passe dans votre navigateur. Les commandes et fichiers Compose, y compris les mots de passe qu’ils contiennent, ne sont jamais envoyés. Parcourir tous les outils gratuits.

Un problème, ou quelque chose à améliorer ? Nous lisons chaque message et corrigeons vite.

Ce convertisseur docker run vers Docker Compose transforme une commande docker run, comme celles qu’on copie depuis le README d’un projet, en service docker-compose.yml : ports, volumes, variables d’environnement, réseaux, politique de redémarrage, healthcheck, capabilities, devices, accès GPU et des dizaines d’autres options. Il fonctionne aussi dans l’autre sens, en transformant chaque service d’un fichier Compose en commande docker run équivalente, pour un test rapide ou un système sans Compose.

La conversion soigne les détails qui cassent les déploiements réels. Les ports sont mis entre guillemets, car YAML 1.1 lit un 22:22 sans guillemets comme un nombre en base 60. Les volumes nommés conservent leur nom exact : Compose réutilise ainsi les données créées par docker run au lieu de démarrer un « <project>_<volume> » vide. $(pwd) devient un chemin relatif. Les options qui n’affectent que la session CLI, comme -d et --rm, sont retirées avec une note, et tout ce qui n’a pas d’équivalent Compose est signalé par un avertissement plutôt que perdu sans prévenir.

Mode d’emploi

  1. Collez une commande docker run dans la zone de gauche, ou cliquez sur un exemple. Les commandes sur plusieurs lignes avec des barres obliques inverses sont acceptées.
  2. Lisez le docker-compose.yml généré à droite, et vérifiez les notes et avertissements en dessous.
  3. Copiez le YAML ou téléchargez-le sous le nom docker-compose.yml, placez-le dans le répertoire de votre projet et lancez docker compose up -d.
  4. Pour l’autre sens, passez à « Compose → docker run », collez un fichier Compose et copiez la commande de chaque service.

Questions fréquentes

Quelle est la différence entre docker run et docker compose ?

docker run démarre un conteneur à partir d’options passées en ligne de commande. Docker Compose décrit un ou plusieurs conteneurs, leurs réseaux et leurs volumes dans un fichier YAML et les démarre ensemble avec docker compose up. Compose est plus facile à versionner, à relire et à relancer à l’identique, et les services d’un même projet Compose peuvent se joindre par leur nom de service.

Ai-je encore besoin de la ligne version: dans docker-compose.yml ?

Non. La clé version de premier niveau est obsolète dans la Compose Specification utilisée par Docker Compose v2, et les versions actuelles affichent un avertissement indiquant qu’elle est ignorée. Ce convertisseur l’omet. Les fichiers s’appellent généralement compose.yaml aujourd’hui, mais docker-compose.yml est toujours lu.

Pourquoi les données de mon volume ont-elles disparu après le passage à Compose ?

Compose préfixe les volumes nommés avec le nom du projet : un volume appelé pgdata devient myproject_pgdata, c’est-à-dire un nouveau volume vide. Pour réutiliser le volume créé par docker run, déclarez-le au premier niveau avec name: pgdata (ce que fait ce convertisseur), ou marquez-le external: true. Les montages bind (chemins commençant par / ou ./) ne sont pas concernés.

Que deviennent -d, -it et --rm ?

-d concerne la façon dont vous démarrez les conteneurs : utilisez donc docker compose up -d. -i et -t deviennent stdin_open: true et tty: true. --rm n’a pas d’équivalent par service : docker compose down supprime les conteneurs, et docker compose run --rm existe pour les commandes ponctuelles.

Comment les options GPU sont-elles converties ?

--gpus all devient une réservation de périphérique sous deploy.resources.reservations.devices avec driver: nvidia, count: all et capabilities: [gpu], la forme documentée pour Docker Compose. Des GPU précis (--gpus '"device=0,1"') deviennent device_ids. Le NVIDIA Container Toolkit doit toujours être installé sur l’hôte.

Ma commande est-elle envoyée à un serveur ?

Non. L’analyse et la conversion se font dans votre navigateur : les variables d’environnement, mots de passe et noms d’hôtes internes de la commande ne quittent jamais votre machine. Traitez néanmoins un fichier Compose contenant des secrets comme un fichier de mots de passe : déplacez-les dans un env_file listé dans .gitignore.

Les options docker run et leurs clés Compose

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

• -v /host:/ctr ou -v name:/ctr → volumes · --mount → volumes en syntaxe longue · --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 et ipv4_address par réseau

• --entrypoint → entrypoint · arguments après l’image → 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 → mêmes noms

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

Après la conversion : en faire un vrai projet Compose

Une conversion un pour un n’est qu’un point de départ. Dès que plusieurs conteneurs vivent dans un même fichier, remplacez --link et les IP de conteneurs codées en dur par des noms de service (l’application joint la base de données à db:5432), ajoutez depends_on avec condition: service_healthy pour que l’application attende le healthcheck de la base, et supprimez container_name sauf si quelque chose hors de Compose a besoin d’un nom fixe, car il empêche de mettre un service à l’échelle. Déplacez les mots de passe de environment vers un fichier .env ou des secrets Compose, et gardez ce fichier hors de Git.

Outils gratuits similaires

  • Calculateur de sous-réseau — Réseau, broadcast, plage d’hôtes et masque pour n’importe quel CIDR ; découpez des réseaux en VLSM, développez des adresses IPv6 et trouvez les plages qui se chevauchent.
  • Calculateur chmod — Cochez lecture, écriture et exécution pour obtenir le mode octal et la commande chmod, ou décodez 755, 644 et rwxr-xr-x.
  • Générateur de .gitignore — Combinez des modèles .gitignore de langages, frameworks, éditeurs et systèmes d’exploitation en un seul fichier propre.
  • Formateur JSON — Indentez, minifiez et validez du JSON, avec les erreurs d’analyse localisées par ligne et colonne. Dans votre navigateur, sans envoi.
  • Générateur d’expressions cron — Créez une planification cron avec des menus ou collez-en une, lisez-la en langage clair et voyez les 10 prochaines exécutions dans votre fuseau et en UTC. Gratuit, dans le navigateur.