it-swarm.com.de

Wie starte ich einen Docker-Ubuntu-Container in Bash?

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 startexecattach 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

7
Andrew

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.

11
shizhz

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
2
Scott Stensland