Cuando trato de hacer un túnel a través de SSH al Host Mashine (vServer) y luego intento conectarme a través de la ventana acoplable Container-IP interna, entonces no puedo conectarme a MySQL.
Este es mi archivo docker-compose.
version: '2' services: mysql: build: ./mysql environment: MYSQL_ROOT_PASSWORD: test volumes: - ./db:/var/lib/mysqlLa única solución que encontré fue reenviar el MySQL-Port del contenedor mysql al Host-Mashine.
version: '2' services: mysql: build: ./mysql environment: MYSQL_ROOT_PASSWORD: test volumes: - ./db:/var/lib/mysql ports: - 3306:3306Entonces puedo conectarme a través de Host IP a MySQL, pero esto es sin SSH, es directo a través de TCP y el puerto. Esto es un No-Go para mí para traer el Servicio MySQL a Internet.
Puede encontrar las razones aquí https://security.stackexchange.com/questions/63881/is-it-not-safe-to-open-mysqls-port-to-the-internet por las que no es una buena práctica traer su puerto mysql a internet.
Entonces, ¿cuál es una buena práctica para conectarme a mi contenedor docker mysql con SSH pero mantener los puertos mysql cerrados?
Una forma simple es vincular el puerto MySQL solo a la dirección localhost. Eso supone que el host tiene un cliente mysql disponible fuera de Docker.
ports: - 127.0.0.1:3306:3306 También puede omitir la sección de ports por completo (sin enlace de puertos) y usar el cliente mysql que ya está dentro del contenedor.
docker-compose exec mysql bash Luego ejecute el comando mysql dentro del contenedor para realizar las consultas que desee.
Una manera fácil de lograr esto es reenviar el puerto ssh del contenedor docker a algún puerto en su host, es decir
ports: - 22:<some free host port>y luego acceda al contenedor a través de ssh al puerto de host que utilizó. Tenga en cuenta que es una mala idea usar el puerto 22, ya que provocará un conflicto con el servidor ssh que se ejecuta en su host.