GNU/Linux >> LINUX-Kenntnisse >  >> Panels >> Docker

So führen Sie SSH in Docker-Container ein [Schritt für Schritt]

Wenn Sie Fehler beheben oder einen kurzen Blick in einen Docker-Container werfen müssen, ist SSH eine großartige Option. Mit SSH können Sie schnell eine Verbindung zu einem laufenden Container herstellen und sehen, was los ist. Das Herstellen einer Verbindung zu einem Docker-Container erfordert jedoch zunächst einige Einstellungen, und Sie haben einige verschiedene Optionen.

In diesem Tutorial erfahren Sie, wie Sie mit docker run per SSH in Docker-Container einsteigen Befehl und ein Dockerfile.

Fangen wir an!

Voraussetzungen

Wenn Sie Schritt für Schritt folgen möchten, stellen Sie sicher, dass Sie Folgendes haben:

  • Ein Linux-Host. Dieses Tutorial verwendet Ubuntu 18.04.5 LTS.
  • Docker auf dem Linux-Host installiert. Dieses Tutorial verwendet Docker v19.03.8.

Starten eines Containers und SSH in Docker-Container mit docker run

Der docker run command ist ein Docker-Befehl, der einen Befehl ausführt, wenn ein neuer Container zum ersten Mal erscheint. Verwenden von docker run , können Sie mit den folgenden Schritten eine interaktive SSH-Sitzung zu einem Container starten.

Bevor Sie mit diesem Abschnitt beginnen, vergewissern Sie sich, dass Sie ein Docker-Image heruntergeladen haben und verfügbar sind. Dieses Tutorial verwendet das neueste Ubuntu Docker-Image, das auf Docker Hub verfügbar ist.

SSH in Docker-Container mit docker run :

1. Öffnen Sie ein Terminal auf Ihrem lokalen Rechner.

2. Führen Sie docker run aus Befehlsbereitstellung:

  • Der name des auszuführenden Containers (ubuntu_container_ssh )
  • Das i Flag, das angibt, dass Sie eine interaktive SSH-Sitzung mit dem Container öffnen möchten. Das i Flag schließt die SSH-Sitzung nicht, selbst wenn der Container nicht angehängt ist.
  • Das t Flag weist ein Pseudo-TTY zu, das häufig verwendet wird, um Befehle interaktiv auszuführen.
  • Das Basis-Image zum Erstellen des Containers (ubuntu ).
# Creating the container named ubuntu_container_ssh and start a Bash session.
sudo docker run --name ubuntu_container_ssh -i -t ubuntu

An diesem Punkt sind Sie per SSH mit dem Container verbunden und können alle gewünschten Befehle ausführen.

3. Führen Sie als Nächstes einen beliebigen Befehl aus, z. B. touch Befehl. Der Touch-Befehl erstellt einen neuen Ordner mit dem Namen myfolder im tmp Verzeichnis, wie unten gezeigt.

touch /tmp/myfolder

Sie können jetzt alle gewünschten Befehle ausführen!

Wenn Sie mit der Ausführung der Befehle fertig sind, geben Sie schließlich exit ein um die Sitzung zu schließen.

SSH in laufende Docker-Container mit docker exec

Im vorherigen Abschnitt haben Sie gelernt, wie Sie SSH-Befehle ausführen, wenn Sie einen neuen Docker-Container starten. Aber was ist, wenn Sie SSH in Docker-Container einbinden müssen, die bereits ausgeführt werden? Sie führen docker exec aus Befehl.

Die docker exec Befehl erstellt eine Bash-Shell innerhalb eines laufenden Containers und ist eine großartige Möglichkeit, SSH-Befehle an einen Container zu senden.

Bevor Sie mit diesem Abschnitt beginnen, vergewissern Sie sich, dass Sie ein Docker-Image heruntergeladen haben und verfügbar sind. Dieses Tutorial verwendet das neueste NGINX-Docker-Image, das auf Docker Hub verfügbar ist.

SSH in einen laufenden Docker-Container mit docker exec :

1. Öffnen Sie ein Terminal auf Ihrem lokalen Rechner.

2. Führen Sie als Nächstes den docker run aus Befehl zum Starten des Containers. Achten Sie darauf, -d anzugeben -Flag, um den Container im Hintergrund auszuführen, damit er am Leben bleibt, bis Sie ihn entfernen. Der folgende Befehl startet einen Container namens nginx-testing .

sudo docker run --name nginx-testing -d nginx

3. Führen Sie nun den Befehl docker ps aus, um zu überprüfen, ob der Container ausgeführt wird. Das docker ps Der Befehl listet alle laufenden Container auf, die auf dem Docker-Host ausgeführt werden.

4. Führen Sie abschließend docker exec aus , wie unten gezeigt, zu SSH in den laufenden Container namens nginx-testing . Im folgenden Code-Snippet:

  • docker exec Befehl läuft (/bin/bash ), um eine Bash-Shell in den Container zu bekommen.
  • -it Flag ermöglicht es Ihnen, einen Container im interaktiven Modus auszuführen, d. h. Sie können Befehle innerhalb des Containers ausführen, während er noch läuft.
  • nginx-testing ist der Name des Containers.
sudo docker exec -it nginx-testing /bin/bash

Einen OpenSSH-Server einrichten und mit einer Dockerdatei verbinden

Bisher ging das Tutorial davon aus, dass Sie sich mit einem Container verbinden, auf dem bereits ein SSH-Server installiert ist. Aber was, wenn nicht? Vielleicht ist auf dem von Ihnen verwendeten Image OpenSSH noch nicht installiert und Sie müssen es zuerst konfigurieren?

Mit einer Docker-Datei können Sie alle Aufgaben konfigurieren, die nicht nur für SSH in Docker-Containern erforderlich sind, sondern auch einen OpenSSH-Server von Grund auf neu einrichten.

Angenommen, Sie haben Ihr lokales Terminal noch geöffnet:

1. Erstellen Sie optional ein Verzeichnis zum Speichern der Dockerfile. In diesem Tutorial wird ~/DockerFileContainerTest verwendet Verzeichnis.

2. Öffnen Sie Ihren bevorzugten Texteditor, kopieren Sie die unten stehende Docker-Datei hinein und speichern Sie die Datei als Dockerfile innerhalb von ~/DockerFileContainerTest Verzeichnis. Diese Docker-Datei enthält alle Befehle und Konfigurationen, um ein neues Docker-Image auf einem beliebigen Basis-Image zu erstellen und OpenSSH einzurichten.

Die DockerFile Unten finden Sie verschiedene Schritte/Anweisungen zum Erstellen des Containers:

  • FROM Definiert ubuntu:16.04 zu verwendendes Basis-Image.
  • RUN – Führt Befehle in einer neuen Ebene über dem Basisbild aus.
  • CMD – Mit CMD können Sie die Befehle ausführen. Es gibt zwei Möglichkeiten, Befehle auszuführen, entweder über exec oder über Shell-Formate.
  • EXPOSE – Informiert Docker, dass der Container zur Laufzeit auf den angegebenen Netzwerkports lauscht. Der Behälter wird auf Topf 22 ausgestellt .
# Instruction for Dockerfile to create a new image on top of the base image (ubuntu)

FROM ubuntu:16.04

RUN apt-get update && apt-get install -y openssh-server
RUN mkdir /var/run/sshd
RUN echo 'root:mypassword' | chpasswd
RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
RUN sed '[email protected]\s*required\s*[email protected] optional [email protected]' -i /etc/pam.d/sshd
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]

3. Führen Sie als Nächstes den docker build aus Befehl, um das Docker-Image zu erstellen. Das t flag markiert das Bild sshd_container und. ermöglicht Docker, alle erforderlichen Dateien aus dem aktuellen Arbeitsverzeichnis auszuwählen.

# Building the docker Image
sudo docker build -t sshd_tagged_image .

4. Führen Sie nun die docker images aus Befehl, um das erstellte Image zu überprüfen. Beachten Sie das REPOSITORY Attribut. Dieses Attribut ist das mit dem -t erstellte Tag Flag im vorherigen Schritt.

5. Führen Sie docker run aus um den Container aus dem Image zu erstellen und auszuführen, indem Sie Docker mitteilen, das Image im Hintergrund auszuführen (-d ),

Der folgende Befehl weist Docker an, den Container namens test_sshd_container zu erstellen und auszuführen im Hintergrund (-d ), mit dem sshd_tagged_image neu erstelltes Image, das Sie in Schritt 3 erstellt haben, und alle in der Dockerfile definierten Ports als zufällige Ports zu veröffentlichen.

# Running the container using the newly built image
docker run -d -P --name test_sshd_container sshd_tagged_image

Nach der erfolgreichen Ausführung des Docker-Run-Befehls sehen Sie, dass die Container-ID unten generiert wird.

6. Führen Sie docker port aus um die SSH-Konnektivität zwischen dem Docker-Host und dem Container zu überprüfen. Der docker port Befehlsliste die Portzuordnungen oder eine spezifische Zuordnung für den Container.

sudo docker port test_sshd_container

Sie sollten die Ausgabe von 22/TCP → 0.0.0.0:32769 sehen , was angibt, dass Port 22 des Containers dem externen Port 32769 zugeordnet ist .

7. Suchen Sie als Nächstes die IP-Adresse des Containers. Führen Sie dazu docker inspect aus Befehl. Die docker inspect Der Befehl fragt Docker-Informationen ab und rendert die Ergebnisse in einem JSON-Array mit einem format Parameter.

Sie sehen das format Parameterargument unten verwendet den range -Attribut, um die IP-Adresse des Containers zu finden, indem Sie NetworkSettings überprüfen →NetworksIPAddress .

docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' test_sshd_container

8. Nachdem Sie nun die IP-Adresse für SSH haben, versuchen Sie schließlich, eine SSH-Verbindung zum Container herzustellen, und es sollte funktionieren!

ssh [email protected] 

Schlussfolgerung

Sie zeigen jetzt einige Möglichkeiten, SSH mit einem Docker-Container zu verbinden, indem Sie verschiedene Ansätze verwenden. Mit einem dieser Ansätze sollten Sie in der Lage sein, Ihre Container zu beheben und zu verwalten.

Wie planen Sie mit diesem neu gewonnenen Wissen jetzt eine SSH-Verbindung zu Ihrem Container?


Docker
  1. So erstellen, listen und löschen Sie Docker-Container unter Linux

  2. Wie man SSH in einen Docker-Container einfügt

  3. Wie man ein Host-Verzeichnis in einen Docker-Container einbindet

  4. So teilen Sie Daten zwischen Docker-Containern

  5. So listen Sie Docker-Container auf

So entfernen Sie Docker-Container

So stoppen Sie Docker-Container

So benennen oder umbenennen Sie Docker-Container

So führen Sie SSH in einen Docker-Container ein

So verwalten Sie Docker-Container

Docker-Container auflisten / starten / stoppen / löschen