最近、Docker コミュニティから、Docker for Mac を使用して PHPStorm で PHP アプリケーションをデバッグする方法に関する多くの投稿を読んでいました。それらにはすべて有用な情報が含まれていますが、1 か所で機能するソリューションは見られませんでした。
3 に答える
これが私のために働いたものです。
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 port
に1111
(ssh トンネルを開くために使用したもの)。この時点で、PhpStorm は xdebug からの接続の受け入れを開始する必要があります。
このアプローチに懸念はありますか?
xdebug.remote_host=host.docker.internal
どこでも使用できます。