Die Antworten aus diese Frage funktionieren nicht.
Der Docker-Container wird immer beendet, bevor ich attach
kann oder das -t
-Flag nicht akzeptiert. Ich könnte alle Befehle auflisten, die ich ausprobiert habe, aber es ist eine Kombination aus start
exec
attach
mit verschiedenen -it
-Flags und /bin/bash
.
Wie starte ich einen vorhandenen Container in bash? Warum ist das so schwierig? Ist dies eine "unsachgemäße" Verwendung von Docker?
EDITS: Ich habe den Container mit docker run ubuntu
erstellt. Die Informationen zum Container: 60b93bda690f ubuntu "/bin/bash" About an hour ago Exited (0) 50 minutes ago ecstatic_euclid
Zunächst ist Container keine virtuelle Maschine, Container ist eine Isolationsumgebung für die Ausführung eines Prozesses. Der Lebenszyklus des Containers ist an den darin ausgeführten Prozess gebunden. Wenn der Prozess beendet wird, wird auch der Container und die Isolierungsumgebung beendet ist weg. Die Bedeutung von "An Container anhängen" oder "In einen Container eingeben" bedeutet tatsächlich, dass Sie sich in die Isolationsumgebung des running-Prozesses begeben. Wenn Ihr Prozess beendet wurde, wurde auch Ihr Container beendet, sodass es keinen Container gibt für attach
oder enter
. Der Befehl von docker attach
, docker exec
lautet also auf running container.
Welcher Prozess wird gestartet, wenn Sie docker run
in Dockerfile
konfiguriert und in das Docker-Image integriert haben. Nehmen Sie das Bild ubuntu
als Beispiel Wenn Sie docker inspect ubuntu
ausführen, finden Sie in der Ausgabe die folgenden Konfigurationsdateien:
"Cmd": ["/bin/bash"]
dies bedeutet, dass der Prozess gestartet wurde, als docker run ubuntu
ausgeführt wurde, /bin/bash
ist, sich aber nicht in einem interaktiven Modus befindet und ihm keine tty zuweist. Daher wurde der Prozess sofort beendet und der Container wurde beendet. Deshalb haben Sie keine Möglichkeit, den Container erneut zu betreten.
Um einen Container zu starten und bash
einzugeben, probieren Sie einfach Folgendes aus:
docker run -it ubuntu
Dann wirst du in den Container Shell gebracht. Wenn Sie ein anderes Terminal und docker ps
öffnen, werden Sie feststellen, dass der Container ausgeführt wird, und Sie können docker attach
dort eingeben oder docker exec -it <container_id> bash
, um ihn erneut einzugeben.
Sie können sich auch auf diesen Link beziehen, um weitere Informationen zu erhalten.
Hier ist eine sehr einfache Docker-Datei mit Anweisungen als Kommentar. Machen Sie einen Wirbel und sehen Sie, ob Sie einen funktionierenden Container haben, in den Sie sich einloggen können
FROM ubuntu:16.04
ENV TERM linux
ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update
RUN apt-get install -y
CMD ["/bin/bash"]
# ... save this file as Dockerfile then in same dir issue following
#
# docker build --tag stens_ubuntu . # creates image stens_ubuntu
#
# docker run -d stens_ubuntu sleep infinity # launches container
#
# docker ps # show running containers
#
#
# ... find CONTAINER ID from above and put into something like this
#
# docker exec -ti 3cea1993ed28 bash # login to running container
#
Ein Container wird normalerweise beendet, wenn er keine Arbeit zu erledigen hat. Wenn er keine Arbeit gibt, wird er aus diesem Grund sofort beim Start beendet. Normalerweise ist der letzte Befehl Ihrer Dockerfile die Ausführung einer Variante eines Servers bleibt aufgrund einer internen Ereignisschleife am Leben und erhält dadurch seinen umschließenden Container am Leben ... Kurz gesagt, Sie können eine ausführbare Server-Datei als den letzten Parameter Ihres Aufrufs angeben
docker run -d my-image-name my-server-executable