web-dev-qa-db-ja.com

Dockerコンテナー内からのXDebugによるリモートデバッグが機能しない

ドッキングされたAMP環境をセットアップしようとしていますが、リモートデバッガーを機能させることができません。私のセットアップは次のとおりです:

Mysqlを実行しているデータベースコンテナがあり、これはチャームのように機能します。次のDockerfileを使用してDockerイメージ 'phpmysqli'をビルドしました

_FROM php:Apache

RUN docker-php-ext-install mysqli mbstring

# zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20131226/xdebug.so
RUN pecl install xdebug
RUN echo 'zend_extension = /usr/local/lib/php/extensions/no-debug-non-zts-20131226/xdebug.so' >> /usr/local/etc/php/php.ini
RUN touch /usr/local/etc/php/conf.d/xdebug.ini; \
    echo xdebug.remote_enable=1 >> /usr/local/etc/php/conf.d/xdebug.ini; \
    echo xdebug.remote_autostart=0 >> /usr/local/etc/php/conf.d/xdebug.ini; \
    echo xdebug.remote_connect_back=1 >> /usr/local/etc/php/conf.d/xdebug.ini; \
    echo xdebug.remote_port=9000 >> /usr/local/etc/php/conf.d/xdebug.ini; \
    echo xdebug.remote_log=/tmp/php5-xdebug.log >> /usr/local/etc/php/conf.d/xdebug.ini;

RUN echo 'date.timezone = Europe/Berlin' > /usr/local/etc/php/conf.d/date.ini
_

電話する

_docker run --rm -ti  --name web -p 127.0.0.1:8080:80 -v /path/to/projects:/var/www/html --link db:db  phpmysqli
_

このphpinfoの後、それぞれphp -iはxdebug 2.3.2が稼働中であることを示します。

次に、IntelliJ IDEA内にサーバーをセットアップし、ホスト_127.0.0.1_、ポート_8080_、デバッガXdebugを使用して「Docker」と呼びます。 docker runステートメントでボリュームマッピングに類似したパスマッピングを設定しました。

PHP-> Debug settingsで、着信接続にポート_9000_を使用すること、外部接続を受け入れること、および未登録サーバーからの接続を無視しないことを確認しました。

この後、Dockerという新しいPHPリモートデバッグ構成も作成しました。サーバーはDocker、セッションIDは_XDEBUG_IDEA_です。

コンテナでPHPファイルを呼び出すことができます。リンクを介してdbに接続できます...しかし、何らかの理由で、デバッグセッションを開始しようとしても何も起こりません。 Cookieを使用してみました(そうです、XDEBUG_IDEA_をxdebugヘルパーのセッションIDとして設定しました)。 _XDEBUG_SESSION_START=XDEBUG_IDEA_をGETとして送信してみました...

賢い人たちが私が逃したことを教えてくれますか?

この構成で試すことができます。 php-Apacheビルドは、モジュールphpをコンパイルして有効にする2つの方法を提供します。正しいファイル構成を設定するには、docker-php-ext-enable xdebugを使用する方が適切です。

FROM php:5.4-Apache

# Enable and configure xdebug
RUN pecl install xdebug
RUN docker-php-ext-enable xdebug
RUN sed -i '1 a xdebug.remote_autostart=true' /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
RUN sed -i '1 a xdebug.remote_mode=req' /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
RUN sed -i '1 a xdebug.remote_handler=dbgp' /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
RUN sed -i '1 a xdebug.remote_connect_back=1 ' /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
RUN sed -i '1 a xdebug.remote_port=9000' /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
RUN sed -i '1 a xdebug.remote_Host=127.0.0.1' /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
RUN sed -i '1 a xdebug.remote_enable=1' /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
13
azerttyu

PHP、NGINX Docker環境で崇高なを使用して私は、これらの設定で動作するようになりました:

xdebug.remote_enable = 1
xdebug.remote_mode = req
xdebug.remote_port = 9001
xdebug.remote_connect_back=0
xdebug.remote_Host=host.docker.internal

私が理解するのに永遠にかかったのは、remote_HostをHost.docker.internalに設定することでした。

3
Roger

閉じる:xdebug.remote_connect_back=0 追加: xdebug.remote_Host=192.168.0.102[your docker Host/machine IP]

0
user3835452

コンテナのxdebug設定を変更せず、xdebug.remote_connect_back=1を使用して機能させる場合は、HTTPヘッダーX-Forwarded-ForHost.docker.internalのIPに設定できます。このように定義します= PHP $_SERVER['HTTP_X_FORWARDED_FOR']$_SERVER['REMOTE_ADDR']の代わりにxdebugが好み、クライアントIPとして使用します。

0
paha