Vom Startbefehl zur Konfigurationsdatei

Docker Run in Compose umwandeln

Der Startbefehl steht noch in der Shell-History? Mach daraus eine nachvollziehbare Compose-Datei – mit Ports, Umgebungsvariablen und Hinweisen zu bestehenden Volumes.

docker runcompose.yaml
Umwandlung im Browser
01

Einen Befehl einfügen. Anführungszeichen und Zeilenfortsetzungen mit Backslash werden unterstützt. Die Ausgabe aktualisiert sich beim Tippen.

02

compose.yaml

services:
  web:
    image: "nginx:alpine"
    container_name: "web"
    ports:
      - "8080:80"
    volumes:
      - "./html:/usr/share/nginx/html:ro"
    restart: "unless-stopped"
    network_mode: "bridge"

5 Optionen · 1 DienstYAML

Vor dem Start prüfen

  • Hintergrundbetrieb ist eine Startoption. Dafür docker compose up -d verwenden.
  • Relative Bind-Pfade beziehen sich auf compose.yaml. Ablageort prüfen oder absolute Pfade verwenden.
  • network_mode: bridge erhält das Standardnetzwerk von docker run. Für ein Compose-Projektnetzwerk dieses Feld entfernen.
Konfiguration lokal prüfendocker compose config

Ohne Anmeldung. Keine Befehlsausführung. Die Eingabe wird im Browser verarbeitet.

Eine Konfiguration, die sich später noch erklären lässt

Ein langer docker run-Befehl ist schnell ausgeführt. Beim nächsten Serverwechsel müssen aber dieselben Ports, Verzeichnisse und Variablen wieder stimmen. In einer compose.yaml stehen diese Einstellungen getrennt nach Feldern und lassen sich im Versionsvergleich gezielt prüfen.

Der Konverter erstellt aus einem Befehl genau einen Dienst. Er liest keine laufenden Container aus und ergänzt keine vermuteten Abhängigkeiten. Die Ausgabe eignet sich als Ausgangspunkt für eine dokumentierte Konfiguration.

Bestehende Daten und Netzwerke bewusst übernehmen

Benannte Volumes werden mit ihrem tatsächlichen Namen und external: true referenziert. So wird nicht versehentlich ein neues Volume mit Compose-Projektpräfix verwendet. Das Volume muss bereits existieren; bei einer Neuinstallation lässt sich die externe Kennzeichnung entfernen oder das Volume vorher anlegen. Die Umwandlung kopiert keine Daten.

Relative Bind-Mount-Pfade beziehen sich auf den Ablageort der Compose-Datei. Eigene Docker-Netzwerke werden ebenfalls als extern behandelt. Ohne Netzwerkoption bleibt network_mode: bridge erhalten. Wer das Compose-Projektnetzwerk mit Dienstnamensauflösung nutzen möchte, entfernt dieses Feld bewusst.

Vom Einfügen bis zur lokalen Prüfung

Füge einen Befehl mit docker run oder docker container run ein. Lange Befehle dürfen mit Backslash fortgesetzt werden; Werte mit Leerzeichen brauchen Anführungszeichen. Der optionale Dienstname ändert den Schlüssel unter services, nicht einen ausdrücklich gesetzten container_name.

Lies die Hinweise und speichere die YAML-Datei am vorgesehenen Ort. Prüfe auch die referenzierten Dateien und Verzeichnisse und führe docker compose config aus. Für einen dauerhaft laufenden Dienst folgt docker compose up -d; Einmalaufgaben mit --rm werden anders gestartet.

Beispiel: Nginx mit Portfreigabe

Der folgende Dienst veröffentlicht Container-Port 80 auf Host-Port 8080. Die Neustartregel unless-stopped bleibt in der Konfiguration. Das Flag -d gehört dagegen zum Startaufruf und wird nicht als YAML-Feld ausgegeben.

docker run -d --name web -p 8080:80 \
  --restart unless-stopped nginx:alpine
services:
  web:
    image: "nginx:alpine"
    container_name: "web"
    ports:
      - "8080:80"
    restart: "unless-stopped"
    network_mode: "bridge"

Was die Shell vorher auflösen muss

Die Eingabe folgt POSIX-Shell-Syntax. PowerShell, CMD, Pipes, mehrere Befehle und globale Docker-Optionen sind nicht unterstützt. Ersetze Variablen und $(pwd) durch konkrete Werte. Ein wörtliches Dollarzeichen muss geschützt sein, etwa durch einfache Anführungszeichen; in Compose wird es mit $$ erhalten.

Für --env-file wird format: raw verwendet, was Docker Compose ab Version 2.30.0 voraussetzt. Dateiinhalte, Images und freie Ports werden nicht geprüft. Eine gültige Konfiguration allein garantiert deshalb noch keinen erfolgreichen Anwendungsstart.

Docker-Optionen und ihre Compose-Felder

Docker-OptionCompose-FeldBedeutung
IMAGEimageImage und Tag bleiben erhalten
--namecontainer_nameExpliziter Containername
-p, --publishportsZuordnung von Host- und Container-Port
-e, --envenvironmentVariablen ohne Wert aus der Laufzeitumgebung
-v, --volume / --mountvolumesBind Mounts sowie benannte und anonyme Volumes
--networknetworks / network_modeNetzwerkname oder Netzwerkmodus
--restartrestartNeustartregel
IMAGE [COMMAND] [ARG…]commandArgumente bleiben als Liste erhalten

Fragen zur Umstellung auf Compose

Warum fehlt version?

Die Ausgabe folgt der Compose Specification und beginnt mit services. Der alte version-Eintrag wird nicht ergänzt. Zur Prüfung dient der moderne Aufruf docker compose.

Wie starte ich einen Befehl mit --rm?

Nutze docker compose run --rm --service-ports SERVICE und ersetze SERVICE durch den Dienstnamen. Mit --service-ports werden auch die konfigurierten Portzuordnungen veröffentlicht.

Wird --gpus einfach ignoriert?

Nein. Nicht unterstützte Optionen wie --gpus, --link und bestimmte Mount-Einstellungen stoppen die Umwandlung. Diese Teile müssen manuell ergänzt werden.

Kann ich mehrere Befehle zusammenführen?

Wandle sie einzeln um und führe anschließend die Dienstdefinitionen zusammen. Gemeinsame Volumes, Netzwerke und Abhängigkeiten müssen dabei abgestimmt werden.

Werden Zugangsdaten hochgeladen?

Die Umwandlung läuft im Browser und lädt den eingegebenen Befehl nicht hoch. Enthält er Zugangsdaten, stehen diese allerdings auch in der erzeugten Datei. Prüfe sie vor einem Commit.

Was passiert mit einem bereits laufenden Container?

Die Umwandlung verändert nichts auf dem Docker-Host. Beim späteren Start musst du Konflikte mit vorhandenen Containernamen oder belegten Ports selbst auflösen.

Offizielle Docker-Dokumentation: docker run · Compose · $$