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)
$ root@665b4a1e17b6:/#
However when I run the line above I get new CONTAINER ID
$ root@42f1e37bd0e5:/#
Ich habe Vagrant benutzt und möchte ein ähnliches Verhalten wie vagrant ssh
.
sudo docker exec -i -t 665b4a1e17b6 /bin/sh
in dersudo docker exec -i -t container-name /bin/bash
ist ein Weg zu gehen.Antworten:
Die Antwort lautet Dockers
attach
Befehl. Für mein Beispiel oben lautet die Lösung also: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:oder
quelle
sudo docker attach loving_heisenberg
-i -t
equals-it
docker attach
Wenn Sie beispielsweise eine MongoDB-Instanz aufrufen, wird die Instanz beendet. Wie in dieser Frage näher erläutertattach
und handeltexec
es sich um verschiedene Tiere.Ab Docker 1.3:
Wenn der Docker-Container mit dem
/bin/bash
Befehl gestartet wurde, können Sie im Grunde genommen mit darauf zugreifenattach
. Wenn nicht, müssen Sie den Befehl ausführen, um mit eine Bash-Instanz im Container zu erstellenexec
.So beenden Sie Bash, ohne Bash in einem Schurkenprozess laufen zu lassen:
Ja, so einfach ist das.
quelle
RUN
Befehl in der Docker-Datei ist/bin/bash
. Kommt aber drauf an was du meinst. Wenn Sie den Container ausführen und Bash sofort im selben Terminal verfügbar haben möchten,-it
sollten Sie dies mitsudo
vsdocker
group verwenden. In beiden Fällen ist eine Sicherheitslücke in Docker integriert, die dem Gast vollständige Berechtigungen im Host-Dateisystem zur Verfügung stellen kann - unabhängig davon, ob Sie die Docker-Gruppe verwenden odersudo
den Container starten.Obwohl der Autor der Frage ausdrücklich erklärt hat, dass sie an einem laufenden Container interessiert sind, 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>
quelle
Versuche dies:
Quelle: https://docs.docker.com/articles/basics/#running-an-interactive-shell
quelle
root@42f1e37bd0e5:/#
und nichtroot@665b4a1e17b6:/#
)Basierend auf der Antwort von @ Timur habe ich das folgende praktische Skript erstellt
Konfiguration
Legen Sie eine
docker-ssh
Datei$PATH
mit folgendem Inhalt in IhreHinweis : Einige Container enthalten nicht
bash
, aberash
,sh
etc. In diesen Fällenbash
muss im obigen Skript ersetzt werden.Verwendungszweck
Wenn Sie nur eine laufende Instanz haben, führen Sie einfach aus
Andernfalls geben Sie einen Docker-ID-Parameter an, den Sie von
docker ps
(erste Spalte) erhalten.quelle
Wenn in Ihrem Container kein Bash installiert ist, können Sie Folgendes versuchen:
Oder suchen Sie zuerst in / bin nach Muscheln:
quelle
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.
Weitere Hinweise finden Sie unter https://github.com/jeroenpeeters/docker-ssh
quelle
@jpetazzo hat einen tollen Beitrag zu diesem Thema . Die kurze Antwort wäre zu verwenden
nsenter
:PS: Vergiss nicht, die Diskussion in den Kommentaren des Beitrags zu überprüfen ...
Prost
quelle
docker exec
Lösung von @ WiR3D ist wesentlich komfortabler.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.quelle
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 .
quelle
Das funktioniert :-)
quelle
GEHEN HINEIN
Installieren Sie das
goinside
Kommandozeilen-Tool mit:und gehen Sie in einen Docker-Container mit einer geeigneten Terminalgröße mit:
um weitere Informationen zu überprüfen diesen heraus.
quelle
Geben Sie Folgendes ein, um in einen laufenden Container zu hauen:
quelle
Nur zur Information. Wenn Sie sich in einem einfachen Container anmelden müssen, der kein Daemon ist, müssen Sie die folgenden Befehle verwenden:
quelle
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.
quelle