He estado usando XDebug con PHP versión 7.0.* durante los últimos 6 meses en una MAC usando depuración remota en un contenedor Docker.
Estaba ejecutando una versión anterior de la ventana acoplable que usaba VirtualBox a VM para la ventana acoplable, todo funcionaba bien.
Recientemente actualicé Docker a la versión 17.03.1 y no he tenido más que problemas con xDebug. Me puse en contacto con el creador de vscode-php-debug a través de un problema en su repositorio y luego me indicó que abordara el problema con xdebug o docker.
Mi problema es el siguiente:
XDebug se está ejecutando y trabajando en mi contenedor, el registro de xdebug muestra que se conecta a mi IDE pero simplemente cierra la conexión como si no hubiera puntos de interrupción cuando tengo puntos de interrupción establecidos en VSCode.
El problema que publiqué en vscode-php-debug se puede encontrar aquí
Que tiene una copia de mis registros de xDebug y registros de depuración de VSCode ... Muestra que la conexión se realiza pero no se alcanzan puntos de interrupción.
He leído en algunos blogs que Docker ahora necesita una IP de bucle invertido creada para que funcione la conexión a xdebug, que también probé y fallé.
Me resulta sorprendentemente difícil depurar sin un depurador después de usarlo durante tanto tiempo.
Probé muchas configuraciones, reinstalé, reinicié, reconstruí imágenes/contenedores e incluso probé los canales docker y xdebug irc en freenode sin ningún éxito.
EDITAR-2 2018
El valor remote_host ahora se puede cambiar para admitir todas las plataformas:
xdebug.remote_host = "host.docker.internal"EDIT-1 2018 Ya no es necesario usar la solución plist. Como se señala en esta esencia: https://gist.github.com/chadrien/c90927ec2d160ffea9c4#gistcomment-2398281 , ahora puede usar la ventana acoplable para la IP interna de mac.
[xdebug] xdebug.remote_host = "docker.for.mac.host.internal" xdebug.default_enable = 1 xdebug.remote_autostart = 1 xdebug.remote_connect_back = 0 xdebug.remote_enable = 1 xdebug.remote_handler = "dbgp" xdebug.remote_port = 9000 xdebug.idekey="PHPSTORM"CONFIGURACIÓN ANTIGUA
Como está usando Docker en una Mac, estoy publicando la forma en que funcionó mi solución. La mayoría de los créditos van a esta publicación en el foro de Docker .
Suponiendo que su instalación de xdebug sea correcta, esta es mi configuración en php.ini .
[xdebug] xdebug.remote_host=10.254.254.254 xdebug.remote_autostart=1 xdebug.idekey = PHPSTORM xdebug.default_enable = 0 xdebug.remote_enable = 1 xdebug.remote_connect_back = 0 xdebug.profiler_enable = 1 Puede probar su configuración ejecutando este comando en su terminal. sudo ifconfig en0 alias 10.254.254.254 255.255.255.0 .
Si esto funciona, puede convertirlo en un archivo plist y colocarlo en la siguiente ubicación. /Library/LaunchDaemons/com.docker.xdebugFix.plist . A continuación encontrará mi versión del archivo plist.
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>com.docker.xdebugFix</string> <key>ProgramArguments</key> <array> <string>ifconfig</string> <string>en0</string> <string>alias</string> <string>10.254.254.254</string> <string>255.255.255.0</string> </array> <key>RunAtLoad</key> <true/> </dict> </plist>Nota: el plist solo funcionará después de reiniciar su Mac.
Configuración de PHPSTORM (también necesaria después de la edición de 2018)
Después de eso, configuré mi tormenta de PHP con un servidor de depuración como este: 
Después de eso, mis puntos de interrupción funcionaron, si está usando Chrome, también necesitará usar la extensión xdebug, pero estoy bastante seguro de que lo sabe porque lo usó en el pasado.
Revisa tu docker-compose.yml
Tenía una variable de entorno en la mía:
XDEBUG_CONFIG: remote_host=${LAN_IP}que necesitaba ser cambiado a:
XDEBUG_CONFIG: client_host=${LAN_IP}donde LAN_IP se define como su IP de LAN local en su archivo .env
Estoy trabajando con VSCODE devcontainer y uso la siguiente configuración:
Mi launch.json para VSCODE
{ "version": "0.2.0", "configurations": [ { "name": "Xdebug", "type": "php", "request": "launch", "port": 9003 } ] } Uso Dockerfile con un EJECUTAR a continuación para instalar xdebug:
RUN pecl install xdebug && docker-php-ext-enable xdebug Encuentro mi archivo de configuración de xdebug en /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
Edito el archivo de la siguiente manera:
zend_extension=xdebug [xdebug] xdebug.mode=debug xdebug.client_host=host.docker.internal xdebug.start_with_request=yes xdebug.idekey=VSCODEO puede agregarlo en Dockfile como se muestra a continuación:
RUN echo ' \n[xdebug] \n\ xdebug.client_host=host.docker.internal \n\ xdebug.mode=debug \n\ xdebug.start_with_request=yes \n\ xdebug.idekey="VSCODE" \n\ \n' >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini mode Esta configuración controla qué características de Xdebug están habilitadas. Hemos configurado el develop para habilitar las ayudas de desarrollo, como obtener mejores mensajes de error, y la debug para habilitar la depuración por pasos.
client_host Esta configuración le dice a Xdebug la dirección IP o el nombre de host de la máquina que está ejecutando su editor de texto o IDE.
start_with_request Esta configuración determina si se activa un seguimiento de función, estadísticas de recolección de elementos no utilizados, creación de perfiles o depuración de pasos al comienzo de una solicitud de PHP. Establecerlo en sí le indica a Xdebug que siempre inicie una sesión de depuración.
Árbitro. https://matthewsetter.com/setup-step-debugging-php-xdebug3-docker/