Xdebug ignora los puntos de interrupción en Netbeans para el proyecto Php creado dentro del contenedor Docker

Cuando depuro proyecto que no se crea dentro del contenedor Docker, entonces no hay ningún problema con Xdebug.

Pero cuando elimino el proyecto creado dentro del contenedor Docker, Xdebug no se detiene en puntos de interrupción, aunque se está ejecutando y se detiene en xdebug_break ().

Mi host Docker es Ubuntu 14.04. Está instalado como VirtualBox. Utiliza PHP 5.5.9-1ubuntu4.16 con Xdebug v2.2.3. Tengo un volumen montado (entre el host Docker y el contenedor Docker) donde se almacenan los proyectos creados dentro del contenedor Docker.

El contenedor My Docker dentro de Ubuntu 14.0.4 se basa en la versión 6.7 de CentOS (final). Utiliza PHP 5.3.29 con Xdebug v2.1.4 y tiene Xdebug configurado de la siguiente manera (dentro de /etc/php.d/xdebug.ini):

zend_extension=/usr/lib64/php/modules/xdebug.so ;xdebug.remote_autostart = 0 xdebug.remote_autostart = 1 xdebug.remote_connect_back = 1 xdebug.remote_enable = 1 ;xdebug.remote_host = 127.0.0.1 ;xdebug.remote_host = localhost ;xdebug.remote_host = 172.17.42.1 ;xdebug.remote_host = 10.0.2.15 ;xdebug.remote_host = 10.0.2.2 ;xdebug.remote_port = 9001 xdebug.remote_port = 9000 xdebug.remote_handler = dbgp xdebug.profiler_enable_trigger = 1 xdebug.profiler_output_dir = /home/devteam/xdebug/profiler xdebug.remote_log=/home/devteam/xdebug/xdebug.log xdebug.profiler_output_name = cachegrind.out.%c xdebug.show_exception_trace = 1 xdebug.idekey = netbeans-xdebug 

Revisé todos los valores, actualmente mostrados como comentados, para xdebug.remote_port. He intentado diferentes puertos (9001, 9002) para la configuration xdebug.remote_port (por supuesto, con el mismo puerto configurado dentro de Netbeans). También traté de cambiar la configuration de xdebug.remote_connect_back y xdebug.remote_autostart. Me he dado count de que con estos dos ajustes a cero, xdebug estaba colgando y esperando la connection.

Pero aún no puedo hacer que Xdebug se detenga en los puntos de interrupción mientras se depuran los proyectos desplegados previamente dentro del contenedor Docker.

No estoy seguro de si omito algo relacionado con la configuration de Netbeans o la configuration de Xdebug. Pasé muchas horas tratando de encontrar la solución. Estaba tratando de encontrar información relevante dentro de xdebug.log, pero parece que no contiene nada significativo para mí:

 ... <- breakpoint_set -i 1567 -t line -s enabled -f file:///var/www/html/test/index.php -n 3 -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="breakpoint_set" transaction_id="1567" state="enabled" id="11710015"></response> <- breakpoint_set -i 1568 -t line -s enabled -f file:///home/pkowalski/clients/deployments/demon-prep/application/bootstrap_http.php -n 7 -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="breakpoint_set" transaction_id="1568" state="enabled" id="11710016"></response> <- run -i 1569 -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="run" transaction_id="1569" status="stopping" reason="ok"></response> Log closed at 2016-05-20 23:38:11 Log opened at 2016-05-20 23:40:23 -> <init xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" fileuri="file:///mnt/deployments/demon-prep/application/bootstrap_http.php" language="PHP" protocol_version="1.0" appid="1172" idekey="netbeans-xdebug"><engine version="2.1.4"><![CDATA[Xdebug]]></engine><author><![CDATA[Derick Rethans]]></author><url><![CDATA[http://xdebug.org]]></url><copyright><![CDATA[Copyright (c) 2002-2012 by Derick Rethans]]></copyright></init> <- feature_set -i 1570 -n show_hidden -v 1 -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="feature_set" transaction_id="1570" feature="show_hidden" success="1"></response> ... 

Parece que logra establecer puntos de interrupción con éxito, pero no estoy seguro de si la ruta de file es correcta dentro de xdebug.log. Tal vez necesite usar el mapeo de ruta manual dentro de Netbeans, pero no estoy seguro de cómo hacerlo y qué ruta de acceso debe ser una ruta de server.

Ahora mismo si comienzo a depurar, la página se carga. Pero algún time antes, había un error dentro del browser que decía que la connection se había reiniciado. Aparte de eso, un par de veces apareció un error emergente. En algún momento, una window emergente decía que había un problema de comunicación entre Netbeans y Xdebug. En otro momento se mostró un post diferente: que había un error de connection de socket. No estoy seguro de por qué ahora no veo estas windows emergentes.

¿Alguna idea de lo que podría ser la solución para Xdebug que ignora los puntos de interrupción en Netbeans para los proyectos creados dentro del contenedor Docker?

Finalmente resolví el problema por mi count.

Como esperaba, la solución fue establecer correctamente el mapeo de ruta en Netbeans.

Después de analizar xdebug.log nuevamente hoy, he notado que el comienzo del logging contiene información interesante, un valor para el atributo fileuri del elemento init :

 <init xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" fileuri="file:///mnt/deployments/my-project/application/bootstrap_http.php" language="PHP" protocol_version="1.0" appid="139" idekey="netbeans-xdebug"><engine version="2.1.4"><![CDATA[Xdebug]]></engine><author><![CDATA[Derick Rethans]]></author><url><![CDATA[http://xdebug.org]]></url><copyright><![CDATA[Copyright (c) 2002-2012 by Derick Rethans]]></copyright></init> 

La forma en que compartí un directory de mi host Docker, que contiene mi-proyecto , con el contenedor Docker, durante el submandato de la plataforma de carga para mi contenedor Docker fue: docker run … -v / home / pkowalski / clients / deployments: / mnt / deployment .

Entonces, lo que hice para resolver el problema con Netbeans ignorando los puntos de corte para mi proyecto , fue establecer el mapeo de ruta dentro de Netbeans (Propiedades del proyecto -> Configuración de ejecución -> Avanzado) de la siguiente manera:

Ruta del server: / mnt / deployments / my-project

Ruta del proyecto: / home / pkowalski / clients / deployments / my-project

Debido a que tengo un enlace suave creado dentro de mi contenedor Docker para el directory montado: ls -s / mnt / deployments / home / devteam / deployments , inicialmente traté de poner / home / devteam / deployments / my-project como un valor de ruta de server , Pero no funcionó.

Aparte de eso, ahora funciona para mí sin xdebug.remote_host establecido y con xdebug.remote_autostart puesto a cero o uno.

Aquí está el contenido final de trabajo de mi /etc/php.d/xdebug.ini dentro del contenedor Docker:

 zend_extension=/usr/lib64/php/modules/xdebug.so xdebug.remote_autostart = 0 xdebug.remote_connect_back = 1 xdebug.remote_enable = 1 xdebug.remote_port = 9000 xdebug.remote_handler = dbgp