Eu tenho a extensão PHP Xdebug instalada em um contêiner do Docker que executa o PHP-FPM do meu ambiente de desenvolvimento e teste.
Um cliente de depuração (o PhpStorm integrado) escuta na porta 9000 em minha máquina Windows local.
Quando eu instalo um servidor SSH dentro do meu contêiner PHP-FPM e uso PuTTY para criar um túnel SSH reverso que aponta de uma porta local dentro do contêiner PHP-FPM para a porta 9000 na minha máquina Windows, o Xdebug se conecta muito bem ao PhpStorm.
Mas, por razões óbvias, não quero que um servidor SSH seja executado dentro do meu contêiner PHP-FPM. Mas eu não consigo acessar a porta no meu host, quando eu crio o túnel SSH reverso apontando do host (e não dentro de um container) para minha máquina Windows.
Para testar isso, instalei o telnet dentro do contêiner. Quando eu executo o telnet fora de um contêiner, é possível conectar-me à porta, mas dentro do contêiner PHP-FPM, a porta fica indisponível, não importa se eu tento conectar a 127.0.0.1 ou 172.17.0.1 (o IP do Docker do meu host ).
Eu aprendi que isso faz sentido, já que não é possível acessar o dispositivo de loopback de dentro de um contêiner se ele for executado no modo de ponte. Quando eu executo o container com "--net = host" é possível conectar via 127.0.0.1, mas por razões de segurança eu preciso que meus containers sejam executados no modo bridge.
Esta resposta sugere que você defina "GatewayPorts yes" nas configurações do OpenSSH, mas não quero abrir meu caminho inverso portas para o público. Como posso acessar a porta (e somente essa porta - não o dispositivo de loopback inteiro) do túnel SSH reverso no dispositivo de loopback do host a partir do contêiner Docker?