Posted at

Docker for Windowsでxdebugを使う

More than 1 year has passed since last update.

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


目的

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を追加。

netbeans設定.png

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

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

「パスマッピング」:ゲストOSのソースのファイルパス

「プロジェクト」:ホストOSのソースのファイルパス

(ここでゲスト/ホストOSのソース同士がマッピングされデバッグが可能になる)

nete2.png

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


苦労


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

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