web-dev-qa-db-ja.com

phpStormを使用してDockerコンテナをデバッグするにはどうすればよいですか

次のIPの下で、Webブラウザーでコンテナーが正常に実行されます

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.iniを使用して、コンテナにxDebugをインストールします。

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
codinglimo

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
Nicolas Cohen

コンテナ内で実行するだけでうまくいきました:

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は、Dockerを実行している場合のホストのデフォルトIPです。コンテナで実行されているホストのIPを取得できます。

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

より自動化されたソリューションが見つかりました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
Rodion Ivanov