Как отладить контейнер docker с помощью phpStorm


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

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 successful в мой контейнер со следующим 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

Но мои точки останова в моем индексе.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"
3 23

3 ответа:

Ваш контейнер 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 - это только по умолчанию, но это может быть не всегда.

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

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 }'

Я нашел более автоматизированное решение В своей точке входа я запустил скрипт 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 хоста