BrowserTools
Startseite / Konverter / Docker Run zu Compose

Docker Run zu Compose

Machen Sie aus einem docker-run-Befehl eine fertige docker-compose.yml-Datei.

Docker Run zu Compose wird geladen… Wenn nichts passiert, aktiviere JavaScript.

Die meisten Projekte beginnen mit einer einzelnen docker-run-Zeile aus einer README und enden als Wand von Optionen, die niemand noch einmal tippen möchte. Fügen Sie den Befehl hier ein, und dieses Werkzeug schreibt ihn als docker-compose.yml um und ordnet jede erkannte Option dem passenden Compose-Schlüssel zu: aus -p wird ports, aus -v wird volumes, aus -e wird environment, aus --restart wird restart, und so weiter für rund siebzig Optionen, einschließlich Healthchecks, Ressourcengrenzen, Logging-Treibern, Capabilities, Ulimits und GPU-Reservierungen.

Häufig gestellte Fragen

Wird mein docker-run-Befehl an einen Server gesendet?
Nein. Parser und YAML-Ausgabe sind reines JavaScript im Browser, und die Seite stellt während der Umwandlung keine einzige Netzwerkanfrage. Befehle enthalten oft Passwörter, Token oder private Registry-Namen, deshalb ist das wichtig: Sie können einen Produktionsbefehl einfügen, ohne dass etwas hochgeladen, protokolliert oder gespeichert wird.
Welche docker-run-Optionen werden unterstützt?
Rund siebzig, darunter die häufigsten (--name, -p, -v, -e, --restart, --network, -w, -u, --entrypoint, --hostname), die Ressourcengrenzen (--memory, --cpus, --pids-limit, --shm-size, --ulimit), die Sicherheitsoptionen (--cap-add, --cap-drop, --security-opt, --privileged, --read-only), die Healthcheck-Familie, --log-driver mit --log-opt, --mount, --tmpfs, --sysctl, --device und --gpus. Die vollständige Liste steht in der Referenztabelle auf der Seite, und alles Unbekannte erscheint unter den Hinweisen, statt lautlos zu verschwinden.
Warum fehlt -d in der erzeugten Datei?
Der Hintergrundbetrieb ist keine Eigenschaft des Dienstes, sondern die Art, ihn zu starten. Compose startet mit docker compose up -d ohnehin alles im Hintergrund, die Option hat also keinen Schlüssel in der Datei. Dasselbe gilt für --rm, das docker compose down entspricht, und für Terminal-Optionen wie -a und --detach-keys.
Brauche ich den Schlüssel version am Anfang der Datei?
Nein, deshalb ist die Option standardmäßig aus. Die Compose Specification hat ihn abgeschafft, und aktuelle Versionen von Docker Compose geben eine Warnung aus, wenn sie ihn finden. Schalten Sie die Option nur ein, wenn Sie noch das alte docker-compose v1 in Python verwenden, das ein version-Feld tatsächlich erwartet.
Was passiert mit benannten Volumes und Netzwerken?
Ein Mount, dessen Quelle kein Pfad ist, etwa -v pgdata:/var/lib/postgresql/data, ist ein benanntes Volume, also wird pgdata dem Abschnitt volumes auf oberster Ebene hinzugefügt. Mit --network übergebene benannte Netzwerke landen im Abschnitt networks und werden als external markiert, in der Annahme, dass sie durch Ihr docker network create bereits existieren. Entfernen Sie external: true, wenn Compose sie stattdessen mit dem Projekt anlegen soll.
Kann ich mehrere Container auf einmal umwandeln?
Ja. Fügen Sie mehrere docker-run-Befehle ein, einen pro Zeile oder mit && beziehungsweise ; verkettet, und jeder wird zu einem Dienst. Der Dienstname stammt aus --name, sofern vorhanden, sonst aus dem Image-Namen, und Doppelungen bekommen ein numerisches Suffix. Das ist der schnellste Weg, ein Startskript für eine Anwendung und ihre Datenbank in eine einzige Compose-Datei zu überführen.
Warum stehen Portangaben in Anführungszeichen?
Weil YAML 1.1 ein blankes 22:22 als Sexagesimalzahl liest, die klassische Anfängerfalle bei Compose. Die Anführungszeichen halten den Wert als Zeichenkette und die Zuordnung intakt. Andere Werte werden nur dann zitiert, wenn es nötig ist, damit die Ausgabe lesbar bleibt.
Versteht das Werkzeug --mount und Healthchecks?
Ja. Eine --mount-Angabe wird in der langen Volume-Syntax mit type, source, target und read_only geschrieben, wie Compose es für Bind- und Tmpfs-Mounts erwartet. Die Optionen --health-cmd, --health-interval, --health-timeout, --health-retries und --health-start-period werden zu einem healthcheck-Block zusammengefasst, wobei der Befehl in CMD-SHELL gehüllt wird, sofern er nicht bereits mit CMD beginnt.
Wie führe ich die fertige Datei aus?
Speichern Sie sie als docker-compose.yml (der Download-Knopf erledigt das), öffnen Sie ein Terminal in diesem Ordner und führen Sie docker compose up -d aus. Prüfen Sie sie vorher mit docker compose config, das die Datei validiert und vollständig aufgelöst ausgibt. Lesen Sie den Abschnitt mit den Hinweisen auf dieser Seite, bevor Sie etwas produktiv starten, denn einige Optionen haben keine Entsprechung und verlangen eine Entscheidung von Hand.

Über Docker Run zu Compose

Der Konverter liest den Befehl so, wie es eine Shell tun würde. Zeilenfortsetzungen mit Backslash, einfache und doppelte Anführungszeichen, kurze Optionen mit angehängtem Wert wie -p8080:80, gebündelte Optionen wie -itd und die Form --option=wert werden alle verarbeitet, Sie können also einen Befehl direkt aus der Dokumentation einfügen, ohne ihn vorher aufzuräumen. Fügen Sie mehrere Befehle ein, einen pro Zeile oder mit && verbunden, und jeder wird zu einem eigenen Dienst in derselben Datei. Benannte Volumes und Netzwerke, die diese Dienste nutzen, werden gesammelt und in den Abschnitten volumes und networks auf oberster Ebene deklariert, und Ports werden in Anführungszeichen gesetzt, damit ein Wert wie 22:22 vom YAML-Parser nicht als Sexagesimalzahl gelesen wird.

Optionen, die nur beim Start eines Containers Sinn ergeben, gehören nicht in eine Compose-Datei, und das Werkzeug sagt es Ihnen, statt sie stillschweigend zu verwerfen: -d wird durch docker compose up -d ersetzt, --rm durch docker compose down, und Optionen wie --cidfile oder --detach-keys erscheinen mit einer kurzen Erklärung unter den Hinweisen. Alles läuft im Browser, ohne Serveraufruf und ohne externe Bibliothek, sodass Befehle mit Passwörtern, privaten Registry-Namen oder internen Image-Namen die Seite nie verlassen. Kopieren Sie das Ergebnis oder laden Sie es als docker-compose.yml herunter und führen Sie im selben Ordner docker compose up -d aus.

Compose hieß anfangs Fig

Vor Docker Compose gab es Fig, ein kleines Python-Werkzeug, das Orchard Laboratories 2013 veröffentlichte. Fig brachte die Idee auf, dass eine Anwendung aus mehreren Containern in einer einzigen YAML-Datei beschrieben und mit einem einzigen Befehl gestartet werden sollte, zu einer Zeit, in der ein Shell-Skript voller docker-run-Zeilen üblich war. Docker kaufte Orchard 2014, und Fig wurde im Jahr darauf zu docker-compose, bei fast unverändertem Dateiformat.

Danach durchlief das Format ein Jahrzehnt der Umbrüche. Version 1 hatte überhaupt keine Schlüssel auf oberster Ebene, Version 2 brachte services, volumes und networks, und Version 3 wurde von Docker Swarm geprägt, weshalb Schlüssel wie deploy bis heute in Dateien auftauchen, die nie einen Swarm sehen werden. Die Nummerierung endete mit der Compose Specification, die die Zweige 2 und 3 zusammenführte und das Feld version überflüssig machte.

Die Neuentwicklung von Python nach Go in Compose V2 änderte auch den Aufruf: aus docker-compose mit Bindestrich wurde docker compose als Unterbefehl der Docker-CLI. Die alte eigenständige Binärdatei erreichte im Juli 2023 ihr Lebensende. Wenn ein Tutorial also noch verlangt, version: '3.8' an den Anfang der Datei zu schreiben, wurde es für ein Werkzeug geschrieben, das Docker nicht mehr ausliefert.

Unterstützen