Actualmente tengo una imagen de Docker que ejecuta Alpine Linux dentro de una red privada. Tengo acceso de root a esa imagen de la ventana acoplable.
En la misma red privada, hay una instancia de base de datos. Solo los sistemas en la misma red pueden acceder a la base de datos (por ejemplo: la imagen de Docker antes mencionada)
En este momento, para depurar cosas dentro de la base de datos, tuve que utilizar SSH en la imagen de la ventana acoplable y luego ejecutar herramientas de línea de comandos desde dentro de esa imagen de la ventana acoplable. eso es bastante complicado
¿Hay alguna forma de conectarme a esa base de datos utilizando herramientas de desarrollo dentro de mi PC local? No estoy seguro de si el término para esto es reenvío de puertos o proxy.
Respuesta1
Supongo que te conectas así:
ssh user@docker
Necesitas -L
:
ssh -L port1:server:port2 user@docker
¿Dónde server:port2
está la dirección y el puerto de la base de datos como se ve desde el contenedor Docker (esta dirección se resolverá?allá).
Su local ssh
escuchará localmente en el puerto TCP port1
. Tú eliges el puerto.
Ahora conéctese desde la computadora local a localhost:port1
(o 127.0.0.1:port1
) y la conexión llegará server:port2
desde docker
. La server
máquina lo verá venir de docker
. Esto se llama "reenvío de puerto local".
De esta manera una herramienta local puede llegar a la base de datos remota. La herramienta debe conectarse a localhost:port1
.
Notas:
- Esto sólo funciona para TCP,no UDP.
- Otras máquinas en su red local no podrán usar su computadora local como retransmisión para acceder a la base de datos. Probablemente así es como lo quieres. Si no es así, consulte esta pregunta:¿Puedo usar SSH para servir un recurso tunelizado en una red local?
- Úselo
ssh -N …
para establecer un túnel.sin ejecutar un comando remoto. - Úselo
autossh
para automatizar esto. - Los puertos con números inferiores a 1024 tienen privilegios. Como usuario normal, no puede vincularse a dicho puerto. Elija
port1
en consecuencia. - La configuración
AllowTcpForwarding
delsshd_config
servidor SSH (docker
en su caso) se puede utilizar para no permitir el reenvío de puertos. El valor predeterminado es permitir, por lo que probablemente funcionará de inmediato.