631 Stimmen

Wie führe ich einen Befehl auf einem bereits vorhandenen Docker-Container aus?

Ich habe einen Container mit -d erstellt, damit er nicht interaktiv ist.

docker run -d shykes/pybuilder bin/bash

Ich sehe, dass der Container beendet wurde:

CONTAINER ID        IMAGE                     COMMAND             CREATED             STATUS                      PORTS               NAMES
d6c45e8cc5f0        shykes/pybuilder:latest   "bin/bash"          41 Minuten zuvor     Beendet (0) vor 2 Sekunden                       clever_bardeen

Jetzt möchte ich gelegentliche Befehle auf der Maschine ausführen und dann beenden. Nur um die Antwort zu erhalten.

Ich habe versucht, die Maschine zu starten. Ich habe versucht, sie anzuhängen. Ich dachte, ich könnte run mit einem Container aufrufen, aber das scheint nicht erlaubt zu sein. Mit start scheint es nur schnell zu laufen und dann zu beenden.

Nach dem Beenden möchte ich wieder in den interaktiven Modus zurückkehren.

Ich habe versucht:

docker attach d6c45e8cc5f0

Aber ich erhalte:

2014/10/01 22:33:34 Sie können sich nicht an einen gestoppten Container anhängen, starten Sie ihn zuerst

Aber wenn ich ihn starte, beendet er sich sowieso. Catch 22. Ich kann nicht gewinnen.

8voto

Josh Punkte 1722

Ich möchte darauf hinweisen, dass die beste Antwort ein wenig irreführend ist.

Das Problem bei der Ausführung von docker run ist, dass jedes Mal ein neuer Container erstellt wird. Es gibt jedoch Fälle, in denen wir alte Container überprüfen möchten oder keinen Platz mit neuen Containern belegen möchten.

(Angenommen, clever_bardeen ist der Name des erstellten Containers...)

In OP's Fall stellen Sie sicher, dass das Docker-Image zuerst ausgeführt wird, indem Sie den folgenden Befehl ausführen:

docker start clever_bardeen

Führen Sie dann den Docker-Container mit dem folgenden Befehl aus:

docker exec -it clever_bardeen /bin/bash

5voto

Amin Shojaei Punkte 3558

Ich benutze normalerweise das hier:

    docker exec -it my-container-name bash

um kontinuierlich mit einem laufenden Container zu interagieren.

3voto

wieczorek1990 Punkte 5978

Leider ist es unmöglich, ENTRYPOINT mithilfe von Argumenten mit docker run --entrypoint zu überschreiben, um dieses Ziel zu erreichen.

Hinweis: Sie können die Einstellung von ENTRYPOINT mit --entrypoint überschreiben, aber dies kann nur das ausführbare Binärprogramm setzen (kein sh -c wird verwendet).

3voto

Andreas Steffan Punkte 5899

Unter der Annahme, dass das Bild den Standard-Einstiegspunkt /bin/sh -c verwendet, wird das Ausführen von /bin/bash im Daemon-Modus (-d) sofort beendet. Wenn Sie möchten, dass dieser Container eine interaktive Shell ausführt, verwenden Sie stattdessen -it anstelle von -d. Wenn Sie beliebige Befehle in einem Container ausführen möchten, der normalerweise einen anderen Prozess ausführt, könnten Sie nsenter oder nsinit ausprobieren. Sehen Sie sich die Details auf https://blog.codecentric.de/en/2014/07/enter-docker-container/ an.

2voto

Lyncean Patel Punkte 2373

Für Mac:

$ docker exec -it  sh

wenn Sie sich als Root-Benutzer verbinden möchten:

$ docker exec -u 0 -it  sh

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