Как я могу отладить мой докер контейнер с phpStorm

По следующему IP мой контейнер успешно запускается в моем веб-браузере

http://192.168.99.100:32775

Я также создал том для обмена файлами между моим контейнером и моей файловой системой

docker run --name lampf -d -p 32775:80 -v /Users/sja/Sites/lamkepf2:/var/www/html --link=lampf_db:db codinglimo/apache_php540_gs_imgmck_pdflib9

Теперь я также успешно установил xDebug в свой контейнер со следующим xdebug.ini

zend_extension="/usr/local/lib/php/extensions/no-debug-non-zts-20100525/xdebug.so"
xdebug.remote_enable=on
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9000
xdebug.remote_handler=dbgp
xdebug.profiler_enable=0
xdebug.profiler_output_dir="/temp/profiledir"

PHPStorm также настроен

http://img2.picload.org/image/iowdpww/xdebug.png

Но мои точки останова в моем index.php игнорируются?
В чем моя ошибка?

Проблема решается с помощью Сергея

Мой новый xdebug.ini

zend_extension="/usr/local/lib/php/extensions/no-debug-non-zts-20100525/xdebug.so"
xdebug.remote_enable=on
#xdebug.remote_host=127.0.0.1
xdebug.remote_port=9000
xdebug.remote_connect_back=On
xdebug.remote_handler=dbgp
xdebug.profiler_enable=0
xdebug.profiler_output_dir="/temp/profiledir"

23

Решение

Ваш контейнер Docker не может видеть вашу PHP Storm IDE с IP 127.0.0.1, обычно хост — 172.17.42.1 из контейнера. Также remote_connect_back не будет работать хорошо, вероятно. Попробуйте настроить это так:

xdebug.remote_host=172.17.42.1
xdebug.remote_connect_back=Off

Возможно, вам придется искать правильный способ узнать IP-адрес хоста в вашем контейнере, 172.17.42.1 — это просто значение по умолчанию, но это не всегда так.

18

Другие решения

Это сработало для меня, просто выполнив внутри контейнера:

pecl install -o -f xdebug \
&& rm -rf /tmp/pear \
&& echo "zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20131226/xdebug.so" > /usr/local/etc/php/conf.d/xdebug.ini \
&& echo "xdebug.remote_enable=on"  >> /usr/local/etc/php/conf.d/xdebug.ini \
&& echo "xdebug.remote_host=172.17.42.1" >> /usr/local/etc/php/conf.d/xdebug.ini \
&& echo "xdebug.remote_connect_back=On" >> /usr/local/etc/php/conf.d/xdebug.ini \
&& echo "memory_limit = 64M" > /usr/local/etc/php/conf.d/php.ini

И затем, перезапуская контейнер.

172.17.42.1 — это IP-адрес хоста по умолчанию при запуске Docker.
Вы можете получить IP вашего хоста, выполняющегося в контейнере:

/sbin/ip route|awk '/default/ { print $3 }'
5

Я нашел более автоматизированное решение
В моей ENTRYPOINT я запустил скрипт startServices

#!/bin/bash
HOST_IP=`/sbin/ip route | awk '/default/ { print $3 }'`
head -n -1 /etc/php5/mods-available/xdebug.ini > /etc/php5/mods-available/xdebug.tmp
echo "xdebug.remote_host="$HOST_IP >> /etc/php5/mods-available/xdebug.tmp
rm /etc/php5/mods-available/xdebug.ini
mv /etc/php5/mods-available/xdebug.tmp /etc/php5/mods-available/xdebug.ini

/usr/bin/supervisord

Он берет текущий IP-адрес хост-машины и заменяет строку в xdebug.ini, а затем запускает supervisord witch, запускает все

Мой начальный xdebug.ini

zend_extension=xdebug.so
[xdebug]
; priority=999
xdebug.remote_autostart=true
xdebug.remote_enable = On
xdebug.remote_connect_back = Off
xdebug.remote_port = 9000
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.var_display_max_data = 2048
xdebug.var_display_max_depth = 128
xdebug.max_nesting_level = 500
xdebug.remote_host=127.0.0.1

После запуска скрипта я получу что-то вроде этого

zend_extension=xdebug.so
[xdebug]
; priority=999
xdebug.remote_autostart=true
xdebug.remote_enable = On
xdebug.remote_connect_back = Off
xdebug.remote_port = 9000
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.var_display_max_data = 2048
xdebug.var_display_max_depth = 128
xdebug.max_nesting_level = 500
xdebug.remote_host=172.17.0.1

Где 172.17.0.1 — мой текущий хост IP

0