559 Stimmen

Wie können Sie sich an Docker-Prozessen anhängen und von ihnen lösen?

Ich kann mich an einen Docker-Prozess anhängen, aber Strg+C funktioniert nicht, um sich davon zu lösen. exit stoppt im Grunde genommen den Prozess.

Was ist der empfohlene Ablauf, um den Prozess am Laufen zu halten, gelegentlich darauf zuzugreifen, um Änderungen vorzunehmen, und dann zu trennen?

3voto

Lon Kaut Punkte 2269

Für alle, die auf das gleiche Problem gestoßen sind wie ich (können den Container nicht abtrennen, ohne den Container zu beenden, auch wenn der Abtrennungs-Schlüssel festgelegt wurde)......

Wenn Sie Ihre Container mit docker-compose up -d starten

anstatt docker attach {container name} zu verwenden, um das letzte Protokoll anzuzeigen ....

versuchen Sie docker-compose logs -f {service name} Strg+C beendet das Protokoll, ohne den Container zu beenden

{service name} ist der Service, der in Ihrer docker-compose.yml Datei aufgeführt ist.. (z.B. wenn der Containername=elk_logstash_1 -> Servicename=logstash

1voto

Jared Williams Punkte 19

Ich bin auf einem Mac und aus irgendeinem Grund würde Strg-p Strg-q nur funktionieren, wenn ich auch Umschalt gedrückt halte

1voto

  1. Öffnen Sie ein neues Terminal
  2. Suchen Sie die laufende Container-ID docker ps
  3. Beenden Sie den Container docker kill ${containerId}

1voto

Maxim Suslov Punkte 3347

Ich fand die Dokumentation zum Anhängen und Abhängen ein wenig kompliziert.

Ich habe verschiedene Optionen ausprobiert, um einen Container zu starten und mich von einem anderen Terminal aus anzuhängen. Die folgende Tabelle fasst die Ergebnisse zusammen:

Anhangsverhalten

Es hat die folgende Spaltenbedeutung:

  • -d - wird die Option docker run -d verwendet oder nicht
  • --sig-proxy - wird die Option docker attach --sig-proxy=true|false verwendet oder nicht
  • --no-stdin - wird die Option docker attach [--no-stdin] verwendet oder nicht
  • keys - ob Docker Eingabetasten an die containerisierte Anwendung sendet oder nicht
  • ^C - was passiert, wenn der Benutzer Strg+C drückt
  • ^P ^Q - was passiert, wenn der Benutzer Strg+P Strg+Q drückt

Es gibt ein paar Erkenntnisse:

  • Das Anhängeverhalten hängt nicht von der -d-Option ab, sondern von -i und -t

  • Sie können die Anhangsspalten entweder als Verbindung zu einem Container von einem anderen Terminal aus betrachten (z.B. docker attach --sig-proxy=false und Sie können die Verbindungsoptionen variieren) oder von dem aktuellen Terminal aus (aber Sie können die Verbindungsoptionen nicht variieren; --sig-proxy=true)

  • Das Abhängen hängt von den laufenden Optionen ab und kann auf drei Arten erfolgen:

    1. docker run [-i|-t] und verbinden Sie von einem anderen Terminal aus mit docker attach --sig-proxy=false CONT -> drücken Sie Strg+C
    2. docker run -it und verbinden Sie von einem anderen Terminal aus mit docker attach -> drücken Sie Strg+P Strg+Q
    3. docker run -it und verbinden Sie von einem anderen Terminal aus mit docker attach --no-stdin -> drücken Sie Strg+C

(natürlich sollten Sie andere notwendige Argumente für Befehle wie einen Container-Namen oder ein Bild bereitstellen)

P.S. Ich habe verschiedene Szenarien mit -i und -t (nur eine davon) ausprobiert, aber keinen Unterschied im Verhalten festgestellt. Ich habe gesehen, dass @ken-cochrane folgendes bereitstellt:

docker run -i kann nicht mit ^P^Q abgelöst werden; wird die Standard-Eingabe stören

aber ich konnte dies nicht reproduzieren.

1voto

Zaiban Ali Punkte 11

Wenn die Methode --sig-proxy=false nicht funktioniert, können Sie auch die Escape-Sequenz ändern:

docker attach --detach-keys="" 

Zum Beispiel, wenn ich den Container mit "Strg-C" abhängen möchte, kann ich den Container anhängen mit:

docker attach --detach-keys="ctrl-c" 

Das Format des ist entweder ein Buchstabe [a-Z] oder ctrl- kombiniert mit einem der folgenden:

  • a-z (ein einzelner Kleinbuchstabe)
  • @ (at Zeichen)
  • [ (linke Klammer)
  • \ (zwei nach hinten gerichtete Schrägstriche)
  • _ (Unterstrich)
  • ^ (Zirkumflexzeichen)

Weitere Informationen finden Sie auch unter -> Override the detach sequence

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X