Wie bekomme ich bash oder ssh in einen laufenden Container im Hintergrundmodus?


Zur akzeptierten Antwort gehen


Ich möchte in einen laufenden Docker-Container ssh oder bash. Bitte siehe Beispiel:

 $ sudo docker run -d webserver
webserver is clean image from ubuntu:14.04
$ sudo docker ps
CONTAINER ID  IMAGE            COMMAND    CREATED STATUS  PORTS          NAMES
665b4a1e17b6  webserver:latest /bin/bash  ...     ...     22/tcp, 80/tcp loving_heisenberg 
 

Jetzt möchte ich so etwas bekommen (gehe in den laufenden Container):

 $ sudo docker run -t -i webserver (or maybe 665b4a1e17b6 instead)
$ [email protected]:/# 
However when I run the line above I get new CONTAINER ID
$ [email protected]:/#
 

Ich habe Vagrant benutzt und möchte ein ähnliches Verhalten wie vagrant ssh .


941





2014-08-01




Anzahl der Antworten: 15


Die Antwort lautet Dockers attach Befehl. Für mein Beispiel oben lautet die Lösung also:

 $ sudo docker attach 665b4a1e17b6 #by ID
or
$ sudo docker attach loving_heisenberg #by Name
$ [email protected]:/#
 

Für Docker Version 1.3 oder höher: Dank an Benutzer WiR3D, der einen anderen Weg vorgeschlagen hat, die Shell eines Containers zu erhalten. Wenn wir verwenden attach , können wir nur eine Instanz der Shell verwenden. Wenn wir also ein neues Terminal mit einer neuen Instanz der Shell eines Containers öffnen möchten, müssen wir nur Folgendes ausführen:

 $ sudo docker exec -i -t 665b4a1e17b6 /bin/bash #by ID
 

oder

 $ sudo docker exec -i -t loving_heisenberg /bin/bash #by Name
$ [email protected]:/#
 

1318


2014-08-05

Ab Docker 1.3:

 docker exec -it <containerIdOrName> bash
 

Wenn der Docker-Container mit dem /bin/bash Befehl gestartet wurde, können Sie im Grunde genommen mit darauf zugreifen attach . Wenn nicht, müssen Sie den Befehl ausführen, um mit eine Bash-Instanz im Container zu erstellen exec .

So beenden Sie Bash, ohne Bash in einem Schurkenprozess laufen zu lassen:

 exit
 

Ja, so einfach ist das.


683


2014-10-29

Obwohl der Autor der Frage ausdrücklich erklärt hat, dass er an einem laufenden Container interessiert ist, ist es auch erwähnenswert, dass Sie, wenn der Container nicht läuft, ihn ausführen möchten, um herumzustöbern, Folgendes ausführen können:

docker run -i -t --entrypoint /bin/bash <imageID>


125


2014-11-07

Versuche dies:

 sudo docker run -i -t webserver /bin/bash
 

Quelle: https://docs.docker.com/articles/basics/#running-an-interactive-shell


27


2014-08-01

Basierend auf der Antwort von @ Timur habe ich das folgende praktische Skript erstellt

Installieren

Legen Sie eine docker-ssh Datei $PATH mit folgendem Inhalt in Ihre

 #!/bin/bash -xe

# docker container id or name might be given as a parameter
CONTAINER=$1

if [[ "$CONTAINER" == "" ]]; then
  # if no id given simply just connect to the first running container
  CONTAINER=$(docker ps | grep -Eo "^[0-9a-z]{8,}\b")
fi

# start an interactive bash inside the container
# note some containers don't have bash, then try: ash (alpine), or simply sh
# the -l at the end stands for login shell that reads profile files (read man)
docker exec -i -t $CONTAINER bash -l
 

Hinweis : Einige Container enthalten nicht bash , aber ash , sh etc. In diesen Fällen bash muss im obigen Skript ersetzt werden.

Verwendung

Wenn Sie nur eine laufende Instanz haben, führen Sie einfach aus

 $> docker-ssh 
 

Andernfalls geben Sie einen Docker-ID-Parameter an, den Sie von docker ps (erste Spalte) erhalten.

 $> docker-ssh 50m3r4nd0m1d
 

19


2016-04-20

Wenn in Ihrem Container kein Bash installiert ist, können Sie Folgendes versuchen:

 docker exec -it CONTAINER /bin/sh
 

Oder suchen Sie zuerst in / bin nach Muscheln:

 docker export CONTAINER|tar -t|egrep ^bin/
 

14


2015-07-29

Ich habe einen containerisierten SSH-Server erstellt, der jedem ausgeführten Container SSH-Funktionen bietet. Sie müssen Ihren Container nicht wechseln. Die einzige Voraussetzung ist, dass der Container Bash hat.

Wenn Sie einen Container mit dem Namen 'web-server1' haben. Der folgende Docker-Ausführungsbefehl startet einen zweiten Container, der SSH für den ersten Container bereitstellt.

 docker run -ti --name sshd-web-server1 -e CONTAINER=web-server1 -p 2222:22 \
-v /var/run/docker.sock:/var/run/docker.sock -v $(which docker):/usr/bin/docker \
jeroenpeeters/docker-ssh
 

Weitere Hinweise finden Sie unter https://github.com/jeroenpeeters/docker-ssh


9


2015-10-03

@jpetazzo hat einen tollen Beitrag zu diesem Thema . Die kurze Antwort wäre zu verwenden nsenter :

 PID=$(docker inspect --format {{.State.Pid}} <container_name_or_ID>)
nsenter --target $PID --mount --uts --ipc --net --pid
 

PS: Vergiss nicht, die Diskussion in den Kommentaren des Beitrags zu überprüfen ...

Prost


6


2015-03-14

Sie können dem Docker-Container auch eine routingfähige IP-Adresse mit Pipework zuweisen und anschließend SSH mit dieser neuen IP-Adresse auf den Computer übertragen.

Dies wird "traditioneller" (ssh) sein, anstatt einen anwendungsspezifischen Befehl wie zu verwenden docker attach , und wird ihn schließlich über Systeme und Versionen hinweg "portabler" machen.


4


2014-10-29

Manchmal ist es praktisch, in einen Docker-Container zu sshen, besonders während der Entwicklung. Das folgende Docker-Image ermöglicht es, mit einem privaten Schlüssel in einen Container zu sshen:

UbuntuWithSSH-Docker

Das Wesentliche der Docker-Datei ist https://gist.github.com/devbkhadka/98792f7bca57f9778793b2db758b3d07 .


3


2017-08-26

 docker run -it openjdk:8
 

Das funktioniert :-)


2


2016-09-06

GEHEN HINEIN

Installieren Sie das goinside Kommandozeilen-Tool mit:

 sudo npm install -g goinside
 

und gehen Sie in einen Docker-Container mit einer geeigneten Terminalgröße mit:

 goinside docker_container_name
 

um weitere Informationen zu überprüfen diesen heraus.


1


2018-08-13

Geben Sie Folgendes ein, um in einen laufenden Container zu hauen:

 docker exec -t -i container_name /bin/bash
 

0


2015-10-11

Nur zur Information. Wenn Sie sich in einem einfachen Container anmelden müssen, der kein Daemon ist, müssen Sie die folgenden Befehle verwenden:

 docker start {id}
docker attach {id}
 

0


2015-11-04

Wenn der Container angehalten wird, wie beispielsweise ein reiner Datencontainer, empfiehlt es sich, jedes Mal einen Einwegcontainer auszuführen, wenn Sie eine Verbindung zum Datencontainer herstellen möchten. In diesem Fall könnte der Datencontainer selbst vollständig leer sein, da der temporäre Container über die Betriebssystemtools verfügen würde.

 $ docker run --rm --volumes-from mydata -it ubuntu bash
[email protected]:/# ls /mydata
[email protected]:/# touch /mydata/foo
[email protected]:/# exit
exit
 

-1


2015-10-14