2

最近、Docker コミュニティから、Docker for Mac を使用して PHPStorm で PHP アプリケーションをデバッグする方法に関する多くの投稿を読んでいました。それらにはすべて有用な情報が含まれていますが、1 か所で機能するソリューションは見られませんでした。

4

3 に答える 3

7

これが私のために働いたものです。

Docker コンテナ内

xdebug 構成の編集

# automatically start debugger on every request
xdebug.remote_enable=1
xdebug.remote_autostart=1
xdebug.remote_port=9000
# send all debug requests to 127.0.0.1, remote_connect_back should be turned off
xdebug.remote_connect_back = 0
xdebug.remote_host=127.0.0.1

#log all xdebug requests to see is it working correctly
xdebug.remote_log=/var/log/remote.log

xdebug が機能することを確認する

この時点で、PHP アプリケーションを実行してみます。ログには、リクエストごとに次のようなエントリが含まれている必要があります。

I: Connecting to configured address/port: 127.0.0.1:9000 I: Connected to client. :-)

ログにこのような内容が表示される場合は、remote_host または remote_connect_back が正しく構成されていません。

I: Checking remote connect back address. I: Checking header 'HTTP_X_FORWARDED_FOR'. I: Checking header 'REMOTE_ADDR'. I: Remote address found, connecting to 172.18.0.1:9000. W: Creating socket for '172.18.0.1:9000', poll: Operation now in progress. E: Could not connect to client. :-(

Xdebug が CLI では機能するがブラウザーからは機能しない状況を見てきました。この問題がログに表示されたとき、remote_connect_back=0 で修正されました。

sshd 構成

コンテナーへの ssh トンネリングを許可するには、/etc/ssh/sshd_conf を編集して以下を追加します。

GatewayPorts yes

必要に応じて sshd を再起動します (理想的には、これは Dockerfile の一部である必要があります)。

ホスト マシン上

リバース SSH トンネルを開始する

このコマンドを実行し、別のターミナル タブを開いたままにします。 ssh -p {container_22_port} -R 9000:localhost:1111 root@127.0.0.1

{container_22_port} は、ホスト マシンのポートであり、docker コンテナーの公開された 22 ポートにマップされます。9000 はコンテナ内の Xdebug が使用するポートで、1111 はホスト マシンが Xdebug 接続をリッスンするために使用するポートです。

netcat でテストする

この時点で、Xdebug が実際に docker コンテナー内からホスト マシンに情報を渡すことを確認できます。netcat を起動して 1111 ポートに送信される内容を確認し、php アプリケーションを実行します。

nc -l 1111

次のように表示されます。

<?xml version="1.0" encoding="iso-8859-1"?>
<init xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" fileuri="file:///var/www/magento2/index.php" language="PHP" xdebug:language_version="7.0.12" protocol_version="1.0" appid="1006" idekey="XDEBUG_ECLIPSE"><engine version="2.5.0rc1"><![CDATA[Xdebug]]></engine><author><![CDATA[Derick Rethans]]></author><url><![CDATA[http://xdebug.org]]></url><copyright><![CDATA[Copyright (c) 2002-2016 by Derick Rethans]]></copyright></init>

PhpStorm の構成

開くFile-> DefaultSettings、そこにあるLanguages&Frameworks-> PHP->Debug変更Xdebug->Debug port1111(ssh トンネルを開くために使用したもの)。この時点で、PhpStorm は xdebug からの接続の受け入れを開始する必要があります。

このアプローチに懸念はありますか?

于 2016-11-18T16:30:30.460 に答える
0

xdebug.remote_host=host.docker.internalどこでも使用できます。

于 2020-03-22T13:33:00.913 に答える