Remote Docker über SSH verbinden
Wir empfehlen die Verwendung der Visual Studio Code-Erweiterung Remote - SSH, um eine Verbindung zu einem Remote-Computer herzustellen, auf dem die Docker-Engine ausgeführt wird. Sie können die Erweiterungen Remote - SSH und Dev Containers zusammen verwenden. Die Schritte finden Sie in der Dev Containers-Dokumentation.
Es ist auch möglich, direkt über SSH-Tunneling eine Verbindung zur Remote-Docker-Engine herzustellen, worüber Sie unten mehr erfahren können.
SSH-Tunneling einrichten
-
Verwenden Sie ssh-keygen oder ein ähnliches Tool, um ein öffentliches/privates Schlüsselpaar für die SSH-Authentifizierung zu erhalten und zu konfigurieren. Die Passwortauthentifizierung wird von Docker nicht unterstützt und ist bei einer Konfiguration basierend auf
DOCKER_HOSTnicht möglich. Wenn ein Schlüsselpaar bereits eingerichtet wurde, kann es verwendet werden. -
Konfigurieren Sie
ssh-agentauf dem lokalen System mit der oben erzeugten privaten Schlüsseldatei.-
Windows (OpenSSH): Die neueste(n) Version(en) von Windows 10 enthalten OpenSSH standardmäßig. Es gibt einen Windows-Dienst,
ssh-agent, der standardmäßig deaktiviert ist und wieder aktiviert und auf automatischen Start gesetzt werden muss. Führen Sie in einer administrativen PowerShell-EingabeaufforderungSet-Service ssh-agent -StartupType "Automatic"undStart-Service ssh-agentaus. Führen Sie dannssh-add <Schlüsseldatei>aus. -
Windows (Pageant): Sie können Pageant anstelle von OpenSSH verwenden. In diesem Fall ist es notwendig, die Umgebungsvariable
SSH_AUTH_SOCK=pageantzu setzen. Am einfachsten ist es, dies als Benutzer- oder Systemumgebungsvariable zu machen. -
Linux:
ssh-agentist standardmäßig vorhanden. Führen Siessh-add <Schlüsseldatei>aus. Ubuntu wurde getestet; Sie könnten auf anderen Distributionen unterschiedliche Ergebnisse erzielen. -
macOS:
ssh-agentist standardmäßig vorhanden, aberssh-addwird über Anmeldungen hinweg nicht beibehalten. Führen Siessh-add <Schlüsseldatei>aus. Wir empfehlen, VS Code so zu konfigurieren, dass dieser Befehl beim Starten des Terminals mit dem Wertargsfür terminal.integrated.profiles.osx ausgeführt wird, oder alternativ ein Startskript zu konfigurieren. Sie können diesen Befehl auch nach jeder Anmeldung manuell ausführen.
-
-
Überprüfen Sie mit
ssh-add -l, ob Ihre Identität für den Agenten verfügbar ist. Es sollten eine oder mehrere Identitäten aufgelistet werden, die etwa so aussehen:2048 SHA256:abcdefghijk somethingsomething (RSA). Wenn keine Identität aufgelistet ist, können Sie keine Verbindung herstellen. Außerdem muss die richtige Identität vorhanden sein. Wenn die Docker CLI funktioniert, sollte auch der Container Explorer funktionieren. Das Fenster Container Explorer verwendet die Docker CLI, die wiederum den Befehlsshverwendet und von einer automatisch erkannten Konfiguration profitiert. -
Erstellen Sie einen Docker-Kontext, der auf die Remote-Maschine mit der laufenden Docker-Engine verweist. Verwenden Sie
ssh://benutzername@host:portals Docker-Endpunkt (ersetzen Sie "host" durch den Namen Ihrer Remote-Maschine oder die IP-Adresse der Remote-Maschine). Geben Sie den folgenden Befehl in einem Terminalfenster eindocker context create my-remote-docker-machine --docker "host=ssh://username@host:port"Geben Sie immer den Benutzernamen in die Docker-Endpunktadresse ein, auch wenn er mit dem lokalen Benutzernamen identisch ist. Wenn Sie den Port weglassen, wird standardmäßig 22 verwendet.
-
Verwenden Sie die Befehlspalette (⇧⌘P (Windows, Linux Ctrl+Shift+P)), um den Befehl Docker-Kontexte: Verwenden auszuführen und den Docker-Kontext zu aktivieren, der auf die Remote-Maschine verweist. Dieser Befehl bewirkt, dass sowohl VS Code als auch die Docker CLI den Kontext der Remote-Maschine verwenden.
Wenn Sie diesen Befehl nicht haben, stellen Sie sicher, dass Sie die Container Tools-Erweiterung installiert haben.
-
Es wird empfohlen, die Aktualisierungsrate auf etwas Längeres als den Standardwert mit der Einstellung
containers.explorerRefreshIntervalzu ändern. Die Verbindung über SSH ist langsam und kann dazu führen, dass erneut versucht wird, zu aktualisieren, bevor die vorherige Aktualisierung abgeschlossen ist. Wir empfehlen mindestens 3000 ms.
Tipps
-
Der "host"-Teil in der Docker-Endpunktzeichenfolge (
ssh://benutzername@host:port) muss entweder ein global auflösbarer DNS-Maschinenname oder eine IP-Adresse sein. Die Container Tools-Erweiterung kann keine Host-Aliase verwenden, die in der SSH-Konfigurationsdatei definiert sind. -
Stellen Sie sicher, dass der Hostschlüssel der Remote-Maschine bereits in der known_hosts-Datei gespeichert ist. Der einfachste Weg, dies sicherzustellen, ist die Verbindung zur Maschine über das
ssh-Clientprogramm (führen Siessh benutzername@host:portvon der Kommandozeile aus). Bei der ersten Verbindung zeigt dasssh-Programm den Hostschlüssel an und lässt Sie ihn bestätigen, wodurch dieknown_hosts-Datei automatisch aktualisiert wird. -
Es gibt ein Problem mit dem ssh-keygen-Dienstprogramm, das mit Windows 10 Build 1909 und älter geliefert wird, das verhindert, dass es ordnungsgemäß mit neueren SSH-Daemons funktioniert (z. B. dem, der mit Ubuntu 20.04 LTS und neuer geliefert wird). Die Problemumgehung besteht darin, für die SSH-Verbindung einen ECDSA-Typ-Schlüssel und keinen RSA-Typ-Schlüssel zu verwenden. Sie können einen ECDSA-SSH-Schlüssel generieren und ihn mit den folgenden Befehlen zum SSH-Agenten hinzufügen
ssh-keygen -t ecdsa -b 521 ssh-add id_ecdsa -
Windows 10 Build 1909 und älter sind von einem Problem betroffen, das verhindert, dass SSH nach einem Windows OS-Update auf Ihre Identitäten zugreifen kann. Die Problemumgehung besteht darin, einen Dummy-Dienst-Eintrag zur Systemkonfiguration hinzuzufügen. Führen Sie Folgendes in einem administrativen PowerShell-Fenster aus
New-Service sshd -BinaryPathName "C:\Windows\System32\OpenSSH\ssh.exe"