Derzeit habe ich ein Docker-Image, auf dem Alpine Linux in einem privaten Netzwerk läuft. Ich habe Root-Zugriff auf dieses Docker-Image.
Im selben privaten Netzwerk befindet sich eine Datenbankinstanz. Nur Systeme im selben Netzwerk können auf die Datenbank zugreifen (Beispiel: das oben erwähnte Docker-Image).
Um Dinge innerhalb der Datenbank zu debuggen, musste ich mich per SSH mit dem Docker-Image verbinden und dann Befehlszeilentools innerhalb dieses Docker-Images ausführen. Das ist ziemlich kompliziert
Gibt es eine Möglichkeit für mich, mich mit dieser Datenbank zu verbinden, indem ich stattdessen Entwicklungstools auf meinem lokalen PC verwende? Ich bin nicht sicher, ob der Begriff dafür Port-Forward oder Proxying ist.
Antwort1
Ich gehe davon aus, dass die Verbindung folgendermaßen hergestellt wird:
ssh user@docker
Du brauchst -L
:
ssh -L port1:server:port2 user@docker
wobei server:port2
die Adresse und der Port der Datenbank aus Sicht des Docker-Containers sind (diese Adresse wird aufgelöstDort).
Ihr lokales Gerät ssh
hört lokal auf dem TCP-Port port1
. Sie wählen den Port.
Stellen Sie nun vom lokalen Computer aus eine Verbindung zu localhost:port1
(oder 127.0.0.1:port1
) her, und die Verbindung wird server:port2
von erreicht docker
. Der server
Computer erkennt, dass sie von kommt docker
. Dies wird als „lokale Portweiterleitung“ bezeichnet.
Auf diese Weise kann ein lokales Tool auf die Remote-Datenbank zugreifen. Das Tool muss eine Verbindung zu herstellen localhost:port1
.
Anmerkungen:
- Dies funktioniert nur für TCP,nicht UDP.
- Andere Rechner in Ihrem lokalen Netzwerk können Ihren lokalen Computer nicht als Relay verwenden, um die Datenbank zu erreichen. Das ist wahrscheinlich Ihr Wunsch. Wenn nicht, überprüfen Sie diese Frage:Kann ich SSH verwenden, um eine getunnelte Ressource in einem lokalen Netzwerk bereitzustellen?
ssh -N …
Zum Erstellen eines Tunnels verwendenohne Ausführung eines Remote-Befehls.- Verwenden Sie
autossh
dies, um dies zu automatisieren. - Ports mit Nummern unter 1024 sind privilegiert. Als normaler Benutzer können Sie sich nicht an einen solchen Port binden. Wählen Sie
port1
entsprechend. - Die Einstellung
AllowTcpForwarding
aufsshd_config
dem SSH-Server (docker
in Ihrem Fall) kann verwendet werden, um die Portweiterleitung zu untersagen. Die Standardeinstellung ist „Zulassen“, daher wird es wahrscheinlich sofort funktionieren.