Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

415
Views
¿Cómo revertir el túnel SSH al contenedor docker remoto para Xdebug?

Hay muchas publicaciones en SO y en otros lugares sobre cómo configurar esto. Hasta ahora no he tenido éxito en hacer que funcione.

Configuración
Máquina local: Windows 10, con Cygwin, git bash y WSL2 con Ubuntu instalado; y MacBook Air (Mojave)
Máquina host: instancia de AWS EC2 que ejecuta Amazon Linux 2
Contenedor Docker: CentOS 7.8 ejecutando PHP con Xdebug

Meta
Depure de forma remota el código PHP en el contenedor desde la máquina local utilizando un túnel inverso desde la máquina local hasta el contenedor.

He hecho que esto funcione antes cuando el código PHP se instaló localmente en la máquina host, por lo que la pregunta no es sobre Xdebug. Tan pronto como moví el código PHP al contenedor, la depuración ya no funciona.

lo que he probado
La configuración de un túnel inverso desde la máquina local hasta la instancia EC2 del host funciona. Para esto, estoy haciendo ssh -vvv -i "aws.pem" -R 9000:localhost:9000 user@ec2instance en terminal, cygwin o git bash y probando con nc -z localhost 9000 || echo 'no tunnel open' en la máquina host.

Cuando docker exec -it container bash en el contenedor y ejecuto nc, el túnel no está disponible.

Estoy usando docker-compose:

 version: '2' services: web: image: 'privateregistry/project/container:latest' restart: always container_name: web ports: - '8082:80' - '447:443' - '9000:9000' volumes: - '.:/var/www/project'

He probado con y sin mapear el puerto 9000. He probado variaciones del túnel ssh:

ssh -vvv -i "aws.pem" -R :9000:localhost:9000 user@ec2instance
ssh -vvv -i "aws.pem" -R 0.0.0.0:9000:localhost:9000 user@ec2instance
ssh -vvv -i "aws.pem" -R \*:9000:localhost:9000 user@ec2instance
ssh -vvv -i "aws.pem" -R 9000:172.20.0.2:9000 user@ec2instance (IP del contenedor)

También intenté usar ssh -L sin suerte.

Varias publicaciones, como esta, sugieren agregar GatewayPorts GatewayPorts yes en la máquina host. He intentado esto también sin cambios.

No he intentado usar --network=host , principalmente por motivos de seguridad. También preferiría no usar ngrok, ya que me gustaría poder usar localhost o host.docker.internal para la configuración de xdebug.remote_host .

Para completar, esto es lo que tengo para Xdebug:

 [XDebug] xdebug.remote_enable=1 xdebug.remote_autostart=1 xdebug.remote_handler="dbgp" xdebug.remote_port=9000 xdebug.remote_host="host.docker.internal" ;xdebug.remote_connect_back=1 xdebug.idekey = VSCODE xdebug.remote_log = "/var/log/xdebug.log"
over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Tengo esto funcionando. Después de leer en la página de manual de ssh y revisar las cosas nuevamente, me di cuenta de que estaba vinculando a la IP del contenedor docker, no a la IP del puente (docker0).

Actualicé mi comando de conexión a ssh -vvv -i "aws.pem" -R 9000:172.17.0.1:9000 user@ec2instance con la IP correcta y el túnel comenzó a funcionar. Todavía tengo GatewayPorts habilitado (según la página del manual) y eliminé el mapeo 9000:9000.

Luego actualicé mi valor xdebug.remote_host a la misma IP y ahora funciona la depuración. No estoy seguro de por qué host.docker.internal no funcionó, pero eso es para otro día.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!