Docker Detached Mode


84

Was ist der getrennte Modus in der Docker-Welt? Ich habe diesen Artikel Link gelesen , aber er erklärt nicht genau, was abgetrennter Modus bedeutet.

Antworten:


141

Mit einer -dOption können Sie einen Docker-Container im getrennten Modus starten . Der Container startet und läuft im Hintergrund. Das heißt, Sie starten den Container und können die Konsole nach dem Start für andere Befehle verwenden.

Das Gegenteil des getrennten Modus ist der Vordergrundmodus. Dies ist der Standardmodus, wenn die -dOption nicht verwendet wird. In diesem Modus wird die Konsole, die Sie zum Ausführen verwenden docker run, an Standardeingaben, -ausgaben und -fehler angeschlossen. Das bedeutet, dass Ihre Konsole an den Prozess des Containers angeschlossen ist.

Im getrennten Modus können Sie die Standardausgabe Ihres Docker-Containers mit verfolgen docker logs -f <container_ID>.

Probieren Sie einfach beide Optionen aus. Ich verwende immer den getrennten Modus, um meine Container auszuführen. Ich hoffe ich konnte es etwas klarer erklären.


Hallo, was an dem, was Sie gesagt haben, verwirrend ist - und in der Docker-Dokumentation heißt es: "Sie ... könnten den Container nach dem Start für andere Befehle verwenden". Offensichtlich verwenden Sie im Vordergrund den Container für andere Befehle, wenn Sie -it haben und sich an einer Eingabeaufforderung befinden. Immer noch auf der Suche nach einer Definition von -d ...
Brian Bulkowski

3
@BrianBulkowski - das sagt diese Antwort überhaupt nicht. Der Ausdruck "... könnte die Konsole nach dem Start verwenden ..." bedeutet, dass das Terminal, von dem aus Sie den Docker-Container gestartet haben, weiterhin als reguläre Shell verwendet werden kann, während der Docker-Container im Hintergrund ausgeführt wird.
Nutzlos

Können Sie die Protokollausgabe auch an eine Datei weiterleiten? Wenn ich Docker-Protokolle -f <container_ID> aufrufe, wird auf meinem Terminal nur eine Zeile nach der anderen verrückt gedruckt.
Jürgen K.

@ JürgenK. Ich fand heraus, dass Sie einfach tun können docker logs -f [container_ID] > logs.txt. Wenn es nicht funktioniert, fügen Sie beim Starten des Docker-Containers das Flag '-it' hinzu, wie von @BMitch unten vorgeschlagen.
Sanlok Lee

@ Sanlok Lee. Vielen Dank. Ist es möglich, ein Limit für die Zeilennummern der Docker-Protokolldatei festzulegen? Die Größe nimmt schnell zu, ich muss es klären
Jürgen K.

29

Die Option zum Trennen in der Docker-Befehlszeile gibt an, dass der Docker-Client ( docker) eine Anforderung an den Server ( dockerd) sendet und der Client dann beendet wird, während diese Anforderung auf dem Server fortgesetzt wird. Ein Teil der Verwirrung kann sein, dass Docker wie ein einzelner Prozess aussieht, wobei es sich in Wirklichkeit um eine Client / Server-Anwendung handelt, bei der der Client nur ein dünnes Frontend auf einer REST-API ist, um jeden Befehl an den Server zu senden.

Mit a docker container run --detachbedeutet dies, dass der Container erstellt wird, der Server bei Erfolg mit einer Container-ID antwortet und der Container weiterhin auf dem Server ausgeführt wird, während Sie andere Befehle ausführen können. Dies wird häufig für einen Server (z. B. Nginx) verwendet, den Sie im Hintergrund starten möchten, während Sie andere Befehle ausführen. Beachten Sie, dass Sie weiterhin einen Container mit den Optionen --interactiveund konfigurieren -ttykönnen (häufig abgekürzt -it) und später a ausführen können, um eine docker container attachVerbindung zu einem bereits ausgeführten Container herzustellen. (Beachten Sie -itd, dass jeder Versuch des Containers, aus stdin zu lesen, hängen bleibt , bis Sie eine Verbindung zu dem Container herstellen, mit dem ausgeführt wird, anstatt ein Ende der Eingabe zu sehen, das häufig einen sofortigen Beenden auslöst, wenn Sie gerade bestanden haben -d.)

Wenn Sie ohne die Option "Trennen" ausführen, führt der Client sofort nach dem Erstellen des Containers einen API-Aufruf zum Anhängen aus, damit Sie die Ausgabe sehen und optional Eingaben für den laufenden Prozess auf dem Container bereitstellen können. Dies ist nützlich, wenn in Ihrem Container etwas Interaktives ausgeführt wird (z /bin/bash. B. ).

Mehrere andere Befehle ermöglichen die Option zum Trennen, einschließlich docker-compose up -dder Option, mit der ein gesamtes Projekt gestartet und im Hintergrund auf dem Server ausgeführt wird. Es gibt auch viele docker serviceBefehle, die entweder getrennt werden, nachdem die Änderung an den Server gesendet wurde, um den Zielstatus eines Dienstes zu erstellen oder zu aktualisieren, oder wenn Sie nicht trennen, wartet der Client, bis der aktuelle Status des Dienstes mit dem Zielstatus übereinstimmt, und Sie können sehen den Fortschritt der Bereitstellung. Beachten docker serviceSie, dass Sie bei Befehlen möglicherweise übergeben müssen, um verbunden --detach=falsezu bleiben. Das Verhalten hat sich im letzten Jahr abhängig von Ihrer Version geändert.


1
IMO, es ist auch sinnvoll zu erwähnen, wie man sich interaktiv von einem angeschlossenen Container löst ( STRG-p STRG-q , --detach-keys)
Leon

@Leon gute Ratschläge, aber stellen Sie sicher, dass Sie mit beiden --interactiveund --tty(aka -it) an den Container angeschlossen sind , damit dies funktioniert.
BMitch

1
Danke @BMitch! Ich glaube ich verstehe jetzt.
VSO

1
Schön erklärt @BMitch, wünschte, die Dokumente könnten so gründlich sein!
Ravi Tiwari

-6
docker run -d -t ubuntu:14.04

Docker-Lauf - Erstellen Sie eine Instanz aus dem Docker-Image als Docker-Container. (Wenn das Image lokal nicht verfügbar ist, wird es vom Docker-Hub abgerufen.) ubuntu - Bildname

14.04 - Tag

-d, --detach - Trennmodus

-t, --tty - Ordne ein Pseudo-TTY zu


13
Dies ist keine Antwort auf die Frage.
0xc0de
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.