Docker for Windowsでxdebugを使う


設定で苦労したので備忘録として書いておく。

目的

Docker for Windowsでwebサービスの開発環境を構築する。
ホストOSはwindows、ゲストOSはlinux。
ホストOSのソースはゲストOSにマウントされている状態。
webはapacheとphp。
netabeansを使ってxdebugでphpデバッグするのが目的。

環境

os : windows 10 pro
Docker : 17.09.0-ce
docker-compose : 1.16.1
php : 5.6
NetBeansIDE 8.2

前提

php等はゲストOSにインストールされてるものとする。
自分の環境では以下で一通り入っている。Dockerfileより抜粋。

RUN yum install --enablerepo=epel,remi-php56,remi -y \
                              php \
                              php-cli \
                              php-gd \
                              php-mbstring \
                              php-mcrypt \
                              php-mysqlnd \
                              php-pdo \
                              php-xml \
                              php-xdebug \
                              php-pear \        
                              php-intl \
                              php-devel \
                              php-xmlrpc \
                              php-pecl-apcu \
                              php-pecl-xdebug

設定

ゲストOS側の設定

php.ini
;xdebug.soがあるパスを書く
zend_extension="/usr/lib64/php/modules/xdebug.so"
xdebug.remote_enable=1
;remote_connect_backを0にしないと動かない
xdebug.remote_connect_back=0
xdebug.remote_autostart=1
;remote_hostはホストOSのipにする
xdebug.remote_host=10.101.65.9
xdebug.remote_handler=dbgp
;portは9000でもよいが衝突しにくいものにしておく
xdebug.remote_port=49190
xdebug.max_nesting_level=1000
;ide側の設定と合わせる必要あり
xdebug.idekey="netbeans-xdebug"
xdebug.profiler_output_dir=/tmp
xdebug.remote_log=/tmp/xdebug.log

/etc/php.d にある15-xdebug.iniも編集

15-xdebug.ini
zend_extension=/usr/lib64/php/modules/xdebug.so
xdebug.default_enable = 1
xdebug.remote_enable  = 1

設定したらapachectl restart

ホストOSのnetbeans設定

プロジェクト右クリック > プロパティ > 実行構成
プロジェクトURLに起動するアプリケーションのURLを追加。

さらに「詳細」をクリック

「デバッグURL」:デフォルトを選択

「パスマッピング」:ゲストOSのソースのファイルパス
「プロジェクト」:ホストOSのソースのファイルパス
(ここでゲスト/ホストOSのソース同士がマッピングされデバッグが可能になる)

プロジェクト右クリック > デバッグ で起動する。

苦労

デバッグ起動時 接続をまっています のまま

php.iniの
xdebug.remote_connect_back=1だと接続できなかった。
/tmp/xdebug.logを見つつ以下を参考に対応。
https://qiita.com/bashishi/items/e40830884d107b4055de

ファイルのマッピングがされない

以下を参考に対応。
https://blog.freedom-man.com/php-xdebug/

参考文献

https://qiita.com/kojionilk/items/5cff97ece056fd3c469f
https://blog.freedom-man.com/php-xdebug/
https://qiita.com/bashishi/items/e40830884d107b4055de
http://tango.hatenablog.com/entry/2016/09/05/201108