設定で苦労したので備忘録として書いておく。
目的
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側の設定
;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も編集
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