2017-12-29 21 views
0

私は基本的にこの設定を使ってSymfonyプロジェクトの開発環境を作成していますhttps://github.com/maxpou/docker-symfony。実行されますが、Xdebugを動作させることができません。ブレークポイントを設定すると停止しません。PHP-FPM DockerコンテナでXdebugを設定する

また、connect_backを使用するようにXdebugを設定しようとしましたが、動作しません。おそらく、私はWindowsマシン上で開発しているという事実に関連しているでしょうか?どんな洞察も高く評価されます。

Dockerfile PHP:FPM

# See https://github.com/docker-library/php/blob/master/7.1/fpm/Dockerfile 
FROM php:7.1-fpm 
ARG TIMEZONE 

MAINTAINER Maxence POUTORD <[email protected]> 

RUN apt-get update && apt-get install -y \ 
    openssl \ 
    git \ 
    unzip 

# Install Composer 
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer 
RUN composer --version 

# Set timezone 
RUN ln -snf /usr/share/zoneinfo/${TIMEZONE} /etc/localtime && echo ${TIMEZONE} > /etc/timezone 
RUN printf '[PHP]\ndate.timezone = "%s"\n', ${TIMEZONE} > /usr/local/etc/php/conf.d/tzone.ini 
RUN "date" 

# Type docker-php-ext-install to see available extensions 
RUN docker-php-ext-install pdo pdo_mysql 


# install xdebug 
RUN pecl install xdebug 
RUN docker-php-ext-enable xdebug 
RUN echo "error_reporting = E_ALL" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini 
RUN echo "display_startup_errors = On" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini 
RUN echo "display_errors = On" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini 
RUN echo "xdebug.remote_enable=1" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini 
#RUN echo "xdebug.remote_connect_back=1" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini 
RUN echo "xdebug.idekey=\"PHPSTORM\"" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini 
RUN echo "xdebug.remote_port=9000" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini 
RUN echo "xdebug.remote_autostart=1" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini 
# DockerNAT gateway IP 
RUN echo "xdebug.remote.host=10.0.75.1" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini 
RUN echo "xdebug.remote.mode=req" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini 
RUN echo "xdebug.remote.handler=dbgp" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini 


RUN echo 'alias sf="php app/console"' >> ~/.bashrc 
RUN echo 'alias sf3="php bin/console"' >> ~/.bashrc 

WORKDIR /var/www/free-energy/symfony 

ドッカー-compose.yml:(REMOTE_ADDRシステム変数を使用して)

# https://github.com/maxpou/docker-symfony 
version: '2' 

services: 
    db: 
     image: mysql 
     volumes: 
      - "./.data/db:/var/lib/mysql" 
     environment: 
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} 
      MYSQL_DATABASE: ${MYSQL_DATABASE} 
      MYSQL_USER: ${MYSQL_USER} 
      MYSQL_PASSWORD: ${MYSQL_PASSWORD} 
    php: 
     build: 
      context: php7-fpm 
      args: 
       TIMEZONE: ${TIMEZONE} 
     volumes: 
      - ${SYMFONY_APP_PATH}:/var/www/free-energy/symfony 
      - ./logs/symfony:/var/www/free-energy/symfony/app/logs 
     environment: 
      PHP_IDE_CONFIG: serverName=free-energy.org 
    nginx: 
     build: nginx 
     ports: 
      - 80:80 
     volumes_from: 
      - php 
     volumes: 
      - ./logs/nginx/:/var/log/nginx 
    elk: 
     image: willdurand/elk 
     ports: 
      - 81:80 
     volumes: 
      - ./elk/logstash:/etc/logstash 
      - ./elk/logstash/patterns:/opt/logstash/patterns 
     volumes_from: 
      - php 
      - nginx 
+1

を参照してください。ドッカー/ –

+0

私は最後にあなたのチュートリアル@ TarunLalwaniの助けを借りてデバッグをしています。キーxdebug.remote.hostはxdebug.remote_hostになり、IPはdockerNatアドレスではなくホストマシンを指すようになりました。私は何かが日後に働くことに非常に感謝しています。それでも、再起動後、私のホストIPは毎日manuelステップを追加するように変更されると思います。また、SSHソリューションでは、root @ host-ipがホストIPを指しているので、私を救うことはできません。 – progonkpa

+1

1)* "XdebugはFPMがポート9001で動作しているのでポート9001で実行するように設定されています" *最後に9000を持つことを前提としています。 2)このような変更は、IDEが動作しているOS /コンピュータ上でデフォルトのxdebugポートが既に使用されている場合(例えば、php-fpmによって)にのみ意味があります。 Dockerコンテナ内に置くだけで、実際にはそのような変更は必要ありません(xdebugはそのIPに接続しないため)。 – LazyOne

答えて

0

Xdebugトラフィックがホストに戻ってきていないことがわかりました。 xdebug.remote_hostでホストマシンのIPアドレスを入力するとデバッグはうまくいきましたが、再起動するたびにIPが変わるため、これは理想的ではありませんでした。幸いにも、Dockerはdocker.for.win.localhostを使ってホストIPを取得する方法を提供します。

私はxdebug.remote_connect_back = 1を使用しようとしましたが、その場所からのトラフィックに反応しましたが、動作していませんでした。 Phpinfo()は、REMOTE_ADDRがlocalhostに設定されていることを示しました。この設定で重要なことは、.iniのxdebug.remote_hostが無視されることです。

xdebug.remote_connect_back 種類:ブール、デフォルト値:0、Xdebugを> = 2.1

有効にした場合、xdebug.remote_host設定は無視され、Xdebugので導入Xdebugのドキュメントから

HTTPリクエストを行ったクライアントに接続しようとします。ここで

働いPHPドッカーコンテナのxdebug.ini構成でDockerfileです:これはhttp://tarunlalwani.com/post/debugging-php-xdebug-を助けている場合

FROM php:7.1-fpm 
ARG TIMEZONE 

MAINTAINER Maxence POUTORD <[email protected]> 

RUN apt-get update && apt-get install -y \ 
    openssl \ 
    git \ 
    unzip 

# Install Composer 
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer 
RUN composer --version 

# Set timezone 
RUN ln -snf /usr/share/zoneinfo/${TIMEZONE} /etc/localtime && echo ${TIMEZONE} > /etc/timezone 
RUN printf '[PHP]\ndate.timezone = "%s"\n', ${TIMEZONE} > /usr/local/etc/php/conf.d/tzone.ini 
RUN "date" 

# Type docker-php-ext-install to see available extensions 
RUN docker-php-ext-install pdo pdo_mysql 

# install xdebug 
RUN pecl install xdebug 
RUN docker-php-ext-enable xdebug 
RUN echo "zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini 
RUN echo "error_reporting = E_ALL" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini 
RUN echo "display_startup_errors = On" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini 
RUN echo "display_errors = On" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini 

# relevant to this answer 
RUN echo "xdebug.idekey=\"PHPSTORM\"" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini 
RUN echo "xdebug.remote_port=9000" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini 
RUN echo "xdebug.remote_enable=1" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini 
RUN echo "xdebug.remote_autostart=1" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini 
RUN echo "xdebug.remote_host=docker.for.win.localhost" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini 

RUN echo 'alias sf="php app/console"' >> ~/.bashrc 
RUN echo 'alias sf3="php bin/console"' >> ~/.bashrc 

WORKDIR /var/www/free-energy/symfony 
0

は=にremote_connect_backを追加し、そうXdebugの現在の訪問者に接続する代わりに変更可能なremote_host。 remote_autostart = onでも試してみると、この問題がブラウザ自体に関連していないことを確認できます。

マッピングをphpStormにも設定することを忘れないでください。しかし、とにかくそれを指示します。また、IDEがデバッグセッションをリッスンしていることを確認します(デバッグツールバーの小さなトグル)。がんばろう。

+0

あなたの提案は非常に興味深いです。私はxdebug.remote_host = 10.113.85.60をコメントアウトし、debug.remote_connect_back = 1を追加しました。残念ながら、実行はもはやブレークポイントで停止しません。多分別の鍵がそれを壊しているかもしれませんが、私はdebug.remote_connect_backのXdebugドキュメントをチェックしましたが、そのようなことはありません。 – progonkpa

+0

'debug.remote_connect_back = 1'は頻繁に動作しません(間違ったIPが検出されます)。特に複数のコンテナがある場合(この場合のように) – LazyOne

+0

xdebug.remote_connect_backにする必要があります。 @LazyOneそれは本当ではない、すべて正常に動作するはずです、私はそのようなプロジェクトの多くがあり、xdebugは魅力のように動作します。著者については、connect_back、port、autostart、remote_remote_enable以外のすべての設定を削除してください。 phpinfo()で設定が適用されていることを確認します。 –

関連する問題