Collez une commande docker run et obtenez une définition de service Compose prête à l'emploi : ports, volumes, variables d'environnement, réseaux, healthcheck et politique de redémarrage, convertis dans votre navigateur.
Transformez une longue commande docker run en un fichier Compose que vous pouvez versionner. Collez la commande exactement comme vous la saisiriez, y compris les retours à la ligne échappés. Les options sans équivalent Compose sont signalées dans les notes plutôt que supprimées en silence.
Notes de conversion
D'une commande ponctuelle à un fichier reproductible
Pourquoi la traduction n'est pas purement mécanique
Une commande docker run et un service Compose décrivent le même conteneur, mais ils répondent à des questions différentes. La commande dit quoi faire maintenant. Le fichier dit ce qui doit être vrai chaque fois que ce service tourne. La plupart des options se transposent proprement, et celles qui résistent sont presque toujours celles qui décrivent l'acte d'exécuter plutôt que le conteneur lui-même.
L'exemple le plus net est le détachement. Écrire -d indique au démon de ne pas monopoliser votre terminal : c'est une propriété de cette invocation, pas du service. Dans Compose, la même intention s'exprime en ligne de commande avec docker compose up -d, si bien que l'option disparaît simplement du fichier. Il en va de même pour --rm, qui demande un nettoyage après cette exécution précise ; l'équivalent Compose consiste à lancer docker compose down quand vous avez terminé.
Les options interactives sont un cas intermédiaire. -i et -t possèdent bien des clés Compose, stdin_open et tty, car garder un shell attaché peut être une véritable propriété d'un service. Elles sont donc converties plutôt que supprimées, même si la plupart des services de longue durée n'en ont pas besoin.
Les guillemets, là où les conversions échouent
La cause la plus fréquente d'une conversion cassée est un guillemet de shell perdu avant que la commande ne soit collée. Prenez un healthcheck : toute la commande de test doit arriver comme un seul argument, d'où les guillemets qui l'entourent en ligne de commande. Collez-la sans les guillemets et les mots deviennent des arguments distincts, le nom de l'image est lu à la mauvaise position, et le résultat n'a aucun sens.
Le convertisseur découpe l'entrée comme le ferait un shell, en respectant les guillemets simples, les guillemets doubles, les échappements par barre oblique inverse et les continuations barre oblique inverse + retour à la ligne : une commande copiée directement depuis un script conserve donc sa structure. Il remet ensuite les valeurs entre guillemets en sortie selon les règles YAML, ce qui compte plus qu'on ne le croit. Une association de ports comme 8080:80 doit être entre guillemets en YAML, car une paire séparée par deux-points et non quotée est ambiguë et d'anciens analyseurs ont historiquement lu des valeurs comme 22:00 comme un nombre sexagésimal.
Les réseaux, et ce que le fichier ne peut pas savoir
La gestion des réseaux est le seul endroit où une conversion fidèle réclame encore une décision de votre part. Si la commande rejoint host, none ou bridge, il s'agit d'un mode et cela devient network_mode. Tout autre nom désigne un réseau qui existe déjà : le service reçoit alors une entrée networks et le fichier déclare ce réseau comme external.
Cette déclaration est une affirmation sur votre environnement : elle indique que le réseau est géré en dehors de ce fichier. Si vous préférez que Compose crée et possède le réseau, supprimez l'indicateur external et laissez-le être défini normalement. Le convertisseur ne peut pas deviner ce que vous voulez, car la commande d'origine prouve seulement que le réseau existait au moment de son exécution.
La même prudence s'applique aux montages bind. Un chemin comme /srv/site fonctionne sur la machine où la commande a été écrite, et nulle part ailleurs. Dès lors que le service vit dans un fichier versionné et partagé, des chemins relatifs ou des volumes nommés sont généralement un meilleur choix.
Questions fréquentes
Pourquoi l'option -d a-t-elle disparu de la sortie ?
Le détachement décrit la façon dont vous démarrez un conteneur, pas ce qu'est le conteneur. Dans Compose, vous exprimez la même chose en lançant docker compose up -d, si bien que cela n'a pas sa place dans le fichier.
Puis-je coller une commande multiligne avec des barres obliques inverses ?
Oui. Les continuations barre oblique inverse + retour à la ligne sont réunies avant l'analyse, ce qui vous permet de copier une commande directement depuis un script shell ou une documentation sans la reformater.
Pourquoi mes ports sont-ils entre guillemets ?
YAML considère une paire séparée par deux-points et non quotée comme ambiguë, et certains analyseurs lisent des valeurs comme 22:00 comme un nombre. Mettre les associations de ports entre guillemets est la manière documentée de les préserver exactement.
Que signifie external: true sur le réseau généré ?
Cela indique à Compose que le réseau existe déjà et qu'il ne doit pas être créé ni supprimé par ce fichier. Si vous voulez que Compose gère lui-même le réseau, retirez cet indicateur.
Les options non prises en charge sont-elles ignorées en silence ?
Non. Tout ce que le convertisseur ne peut pas transposer est listé dans les notes de conversion, afin que vous décidiez quoi en faire plutôt que de découvrir l'omission plus tard.
Ma commande est-elle envoyée quelque part ?
Non. L'analyse et la génération du YAML s'exécutent toutes deux dans votre navigateur avec du code écrit à la main, si bien que la commande ne quitte jamais la page.