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.

1voto

Jenish Rabadiya Punkte 6590

Ich führe einen Windows-Container aus und muss in den Docker-Container schauen, um erstellte und kopierte Dateien und Ordner anzuzeigen.

Um das zu tun, habe ich folgenden Docker-Entrypoint-Befehl verwendet, um das Eingabeaufforderungsfenster innerhalb des Containers auszuführen oder sich daran anzuhängen.

ENTRYPOINT ["C:\\Windows\\System32\\cmd.exe", "-D", "FOREGROUND"]

Das hat mir geholfen, sowohl die Eingabeaufforderung mit dem Container zu verbinden als auch den Container am Leben zu erhalten. :)

1voto

user353305 Punkte 43

Einfache Antwort: starten und gleichzeitig anhängen. In diesem Fall tun Sie genau das, was Sie gefragt haben.

docker start  && docker attach  

Stellen Sie sicher, dass Sie ändern

1voto

Ammar Shah Punkte 133

In meinem Fall habe ich festgestellt, dass ich die -i Option verwenden muss, wenn ich einen Container erstelle, um ihn beim Starten mit dem Befehl docker start weiterlaufen zu lassen (nicht sofort zu beenden).

Angenommen, ich möchte einen Ubuntu-Container ausführen. Lassen Sie uns versuchen, den Container mit und ohne die -i Option zu erstellen, um den Unterschied in der Aktion zu sehen.

Ich werde auch die -t Option verwenden, um ein Pseudo-Terminal zu sehen, wenn ich den Befehl docker attach ausführe, um den Container anzuhängen.

Erstellen eines Containers ohne die -i Option

# Anzeige vorhandener Images
$ docker image ls
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE

# Anzeige vorhandener Container
$ docker container ls -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

# Ziehen des Ubuntu-Images aus dem Docker Hub
$ docker pull ubuntu
Standard-Tag verwenden: latest
latest: Von library/ubuntu wird heruntergeladen
a48641193673: Fertig
Digest: sha256:6042500cf4b44023ea1894effe7890666b0c5c7871ed83a97c36c76ae560bb9b
Status: Neueres Image für ubuntu:latest heruntergeladen
docker.io/library/ubuntu:latest

# Anzeige vorhandener Images
$ docker image ls
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
ubuntu       latest    174c8c134b2a   vor 3 Wochen   77.9MB

# Erstellen eines Containers aus dem Ubuntu-Image ohne die `-i` Option
$ docker create ubuntu
e1a1e3a8996a268d3cad7b0f7dc35a57f308034f05fe34436ad38d93559e516a

# Anzeige vorhandener Container
$ docker container ls -a
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS    PORTS     NAMES
e1a1e3a8996a   ubuntu    "/bin/bash"   vor 3 Sekunden   Created             recursing_mcnulty

# Starten des Containers mit dem Namen "recursing_mcnulty"
$ docker start recursing_mcnulty
recursing_mcnulty

# Anzeige vorhandener Container (STATUS zeigt Exited, da er gestartet und dann sofort beendet wurde)
$ docker container ls -a
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS                     PORTS     NAMES
e1a1e3a8996a   ubuntu    "/bin/bash"   vor 3 Minuten   Exited (0) 7 Sekunden her     recursing_mcnulty

# Anhängen an den Container mit dem Namen "recursing_mcnulty" wird offensichtlich nicht funktionieren
$ docker attach recursing_mcnulty
Sie können keine Verbindung zu einem gestoppten Container herstellen, starten Sie ihn zuerst

Erstellen eines Containers mit der -i Option

# Anzeige vorhandener Images
$ docker image ls
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
ubuntu       latest    174c8c134b2a   vor 3 Wochen   77.9MB

# Anzeige vorhandener Container
$ docker container ls -a
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS                      PORTS     NAMES
e1a1e3a8996a   ubuntu    "/bin/bash"   vor 5 Minuten    Exited (0) 2 Minuten her      recursing_mcnulty

# Erstellen eines Containers aus dem Ubuntu-Image mit der `-i` Option
$ docker create -it ubuntu
a9a61f197058538e11e9c4e1327f270ca391eb461cb46ea5e140d3cf260c7ac3

# Anzeige vorhandener Container
$ docker container ls -a
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS                      PORTS     NAMES
a9a61f197058   ubuntu    "/bin/bash"   vor 13 Sekunden  Created                                vigorous_mendeleev
e1a1e3a8996a   ubuntu    "/bin/bash"   vor 7 Minuten    Exited (0) 5 Minuten her             recursing_mcnulty

# Starten des Containers mit dem Namen "vigorous_mendeleev"
$ docker start vigorous_mendeleev
vigorous_mendeleev

# Anzeige vorhandener Container (STATUS zeigt diesmal "Up")
$ docker container ls -a
CONTAINER ID   IMAGE     COMMAND       CREATED              STATUS                      PORTS     NAMES
a9a61f197058   ubuntu    "/bin/bash"   Vor einer Minute     Up 13 Sekunden                          vigorous_mendeleev
e1a1e3a8996a   ubuntu    "/bin/bash"   vor 8 Minuten        Exited (0) 6 Minuten her              recursing_mcnulty

# Anhängen an den Container mit dem Namen "vigorous_mendeleev" wird jetzt funktionieren
$ docker attach vigorous_mendeleev
root@a9a61f197058:/# 

# Und die Shell ist ebenfalls interaktiv
root@a9a61f197058:/# ls
bin  boot  dev  etc  home  lib  lib32  lib64  libx32  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

0voto

Pierz Punkte 5458

Ein schneller Weg, um den zuletzt beendeten Container wieder aufzunehmen und darauf zuzugreifen:

docker start -a -i `docker ps -q -l`

0voto

Rajesh Gurram Punkte 46
# docker exec -d container_id Befehl 

Beispiel:

# docker exec -d xcdefrdtt service jira stop

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