Zum Hauptinhalt springen
S-EDV news

docker run → Compose

Einen oder mehrere docker-run-Befehle einfügen und eine saubere compose.yaml erhalten – mit Ports, Volumes, Variablen, Netzwerken und Hinweisen auf Optionen, die in Compose anders heißen.

  • Läuft komplett in Ihrem Browser
  • Keine Daten an einen Server
  • Ohne Anmeldung, ohne Tracking

docker run einfügen

Der Befehl wird nur gelesen, nicht ausgeführt. Variablen wie $VAR bleiben stehen und werden später von Compose eingesetzt.

compose.yaml


        

Hinweise

Zuordnung der Optionen

Welche Option von docker run in welchem Compose-Schlüssel gelandet ist – und was nicht übernommen wurde.

Warum Compose statt langer docker-run-Befehle?

Ein docker run mit Ports, Volumes und Variablen ist schnell ausprobiert, aber schwer zu pflegen: Beim nächsten Update müssen Sie den Befehl wiederfinden und exakt gleich erneut eingeben. Eine compose.yaml hält dieselbe Konfiguration als Datei fest. Sie lässt sich versionieren, kommentieren und mit einem Befehl starten, aktualisieren oder entfernen. Mehrere Container eines Projekts landen automatisch in einem gemeinsamen Netz und erreichen sich dort über ihre Dienstnamen. Wie Sie solche Stacks aufbauen, zeigt die Anleitung Docker Compose: Multi-Container-Stacks aufbauen.

Das Tool oben liest Ihren Befehl mit einem eigenen Shell-Parser: Anführungszeichen, Backslash-Fortsetzungen, sudo und docker container run werden verstanden, aber nichts wird ausgeführt und keine Variable ersetzt. Optionen, für die es keine sichere Entsprechung gibt, verschwinden nicht stillschweigend, sondern erscheinen in der Zuordnungstabelle als „nicht übernommen“.

So werden die Optionen übersetzt

docker runcompose.yaml
--name webDienstname web und container_name: web
-p 8080:80ports: - "8080:80"
-v daten:/datavolumes: - "daten:/data" und Eintrag unter volumes: auf oberster Ebene
-e TZ=Europe/Berlinenvironment: - TZ=Europe/Berlin
--restart unless-stoppedrestart: unless-stopped
--network proxynetworks: - proxy, oben als external: true
--network hostnetwork_mode: host
-itstdin_open: true und tty: true
--memory 512m, --cpus 1.5mem_limit: "512m", cpus: 1.5
--health-cmd "…"healthcheck: test: ["CMD-SHELL", "…"]
--gpus alldeploy.resources.reservations.devices mit count: all
-d, --rmkein Gegenstück – gestartet wird mit docker compose up -d

Befehl und Argumente hinter dem Image übernimmt das Tool als Liste in command:. Das entspricht genau dem Verhalten von docker run, bei dem die Argumente ohne Shell an den Container gehen.

Stolperfallen beim Umstieg

Ports immer als Zeichenkette. Parser nach YAML 1.1 lesen Werte wie 22:22 als Zahl zur Basis 60. Die Compose-Dokumentation empfiehlt deshalb, Portangaben in Anführungszeichen zu setzen. Das Tool quotet außerdem Werte wie no, on oder 1000:1000, die YAML sonst als Wahrheitswert oder Zahl deuten könnte.

Dollarzeichen. Compose ersetzt $VAR und ${VAR} beim Start durch Werte aus der Shell oder aus einer .env-Datei im Projektordner. Ein wörtliches $, etwa in einem Passwort-Hash für Traefik, muss als $$ geschrieben werden. Stand es im Befehl in einfachen Anführungszeichen, erledigt das Tool die Verdopplung automatisch.

Benannte Volumes. Compose stellt dem Volume-Namen den Projektnamen voran. Aus portainer_data wird zum Beispiel projekt_portainer_data – ein neues, leeres Volume. Soll ein bestehendes Volume aus docker run weiterverwendet werden, ergänzen Sie auf oberster Ebene name: portainer_data oder external: true.

Pfade und Netze. Relative Pfade wie ./daten gelten relativ zum Ordner der compose.yaml; $(pwd) ersetzt das Tool deshalb durch .. Benutzerdefinierte Netze trägt es als external: true ein, weil sie bei docker run bereits existieren müssen. Soll Compose das Netz selbst anlegen, entfernen Sie diese Zeile.

Keine version-Zeile. Die Compose-Spezifikation wertet version: nicht mehr aus, aktuelle Versionen von Docker Compose weisen nur noch darauf hin. Das Tool lässt die Zeile weg.

Prüfen und starten Sie die erzeugte Datei im Projektordner so:

docker compose config    # Datei prüfen und aufgelöst anzeigen
docker compose up -d     # Dienste im Hintergrund starten
docker compose logs -f   # Protokolle verfolgen

Hinweise zu Healthchecks, Secrets und Containern ohne Root-Rechte finden Sie in Docker Compose absichern. Die YAML-Syntax einer bestehenden Datei prüft der YAML-Validator.

Häufige Fragen

Heißt die Datei compose.yaml oder docker-compose.yml?

Beides funktioniert. Die Compose-Spezifikation bevorzugt compose.yaml; Docker Compose findet im Projektordner aber auch compose.yml, docker-compose.yaml und docker-compose.yml.

Wie ersetze ich einen laufenden Container durch den Compose-Dienst?

Stoppen und entfernen Sie den alten Container mit docker stop name und docker rm name. Bind-Mounts und benannte Volumes bleiben dabei erhalten. Achten Sie auf den Projektnamen-Präfix bei benannten Volumes (siehe oben) und starten Sie danach mit docker compose up -d. Solange der alte Container existiert, scheitert der Start an einem bereits vergebenen container_name.

Sollte ich container_name überhaupt setzen?

Er ist praktisch, wenn Skripte oder andere Werkzeuge den Container unter einem festen Namen ansprechen. Nachteil: Ein Dienst mit festem container_name lässt sich nicht auf mehrere Container skalieren. Innerhalb des Projekts erreichen sich Dienste ohnehin über ihren Dienstnamen. Sie können die Übernahme oben abschalten.

Funktioniert die Datei in Portainer und im Synology Container Manager?

Ja, beide verarbeiten Compose-Dateien: in Portainer als Stack, im Container Manager als Projekt. Relative Pfade wie ./daten funktionieren dort nicht immer wie erwartet – verwenden Sie im Zweifel absolute Pfade auf dem Host. Schritt für Schritt: Portainer auf dem Synology NAS installieren und Container Manager: Compose-Projekt auf dem Synology NAS.

Werden meine Befehle oder Passwörter übertragen?

Nein. Die Umwandlung läuft vollständig in Ihrem Browser, nichts wird gesendet oder gespeichert – auch nicht in der Adresszeile. Trotzdem gilt: Passwörter gehören in Compose besser in eine .env-Datei oder in Secrets als direkt in die compose.yaml.