Ich möchte ssh oder Bash in einen laufenden Docker-Container einbinden. Bitte, siehe Beispiel:
$ sudo docker run -d webserverwebserver is clean image from ubuntu:14.04$ sudo docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES665b4a1e17b6 webserver:latest /bin/bash ... ... 22/tcp, 80/tcp loving_heisenberg
Jetzt möchte ich so etwas bekommen (gehe in den laufenden Container):
Für Docker Version 1.3 oder höher: Danke an den Benutzer WiR3D wer hat einen anderen Weg vorgeschlagen, um die Hülle eines Containers zu bekommen. Wenn wir verwenden attach wir können 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
Grundsätzlich, wenn der Docker-Container mit dem gestartet wurde /bin/bash befehl Sie können darauf zugreifen mit attach. Wenn nicht, müssen Sie den Befehl ausführen, um eine Bash-Instanz innerhalb des Containers mit zu erstellen exec.
Auch um Bash zu beenden, ohne Bash in einem Schurkenprozess laufen zu lassen:
Obwohl der Autor der Frage ausdrücklich gesagt hat, dass er an einem laufenden Container interessiert ist, ist es auch erwähnenswert, dass der Container ausgeführt werden kann, wenn er nicht ausgeführt wird, Sie ihn jedoch ausführen möchten, um herumzustöbern:
Basierend auf @ Timurs Antwort habe ich Folgendes erstellt praktisches Skript
Setup
Setzen docker-ssh datei in Ihrem $PATH mit folgenden Inhalten
#!/bin/bash -xe# docker container id or name might be given as a parameterCONTAINER=$1if [[ "$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
Beachten: Einige Behälter enthalten nicht bash, aber ash, sh usw. In diesen Fällen bash wird im obigen Skript ersetzt.
Nutzung
Wenn Sie nur eine laufende Instanz haben, führen Sie einfach Folgendes aus
$> docker-ssh
Andernfalls geben Sie ihm einen Docker-ID-Parameter, den Sie von erhalten docker ps (erste Spalte)
Ich habe einen containerisierten SSH-Server erstellt, der jedem laufenden Container SSH-Funktionen bereitstellt. Sie müssen Ihren Container nicht ändern. Die einzige Voraussetzung ist, dass der Container bash hat.
Wenn Sie einen Container mit dem Namen 'web-server1' haben. Der folgende Befehl docker run würde einen zweiten Container starten, der SSH für den ersten Container bereitstellt.
Sie können dem Docker-Container auch eine routingfähige IP-Adresse mit Rohrleitungen geben und danach mit dieser neuen IP-Adresse auf den Computer SSH.
Dies wird "traditioneller" (ssh) sein, anstatt einen anwendungsspezifischen Befehl wie zu verwenden docker attach, und wird es schließlich 'portabler' über Systeme und Versionen hinweg machen.
Manchmal ist es praktisch, ssh in einen Docker-Container zu können, insbesondere während der Entwicklung. Das folgende Docker-Image ermöglicht das SSH in einen Container mit einem privaten Schlüssel:
Beachten Sie, dass die Verwendung von SSH zum Einschlagen in laufende Container eine schlechte Praxis ist - siehe [Begründung hier] (If you run SSHD in your Docker containers, you're doing it wrong! /). sudo docker exec -i -t containername / bin bash’ ist ein Weg zu gehen.