【Xdebug】リモートサーバに構築したコンテナにMacから接続する方法【Docker】
リモートサーバ上のLinux環境の上でPHPコンテナをDockerで立ち上げ、Xdebugを使いVisual Studio Codeからリモートデバッグを行う方法について設定に詰まりました。
結論としては、Linux環境ではXdebugの設定に利用するhost.docker.internalが使えないため、VSCodeの設定が必要でした。
環境によるXdebugの設定の違い
ブレークポイントでとまらない原因と対策
ローカルマシン(Mac)上では同じような設定で接続できるのに、開発用にLinuxをリモートサーバとしてVScodeで接続したところ、Xdebugがブレークポイントで止まらずに解決するまでに少々時間がかかりました。設定周りを調べていてそもそもLinuxでDockerコンテナを立ち上げる場合とMac/WindowsでDockerコンテナを立ち上げる場合の違いがありました。
どうやらLinux環境でDockerを使用する場合、host.docker.internalがデフォルトで利用できないようです。設定を追加することもできるようですが、Linuxの場合はDockerを立ち上げるホストマシンのIPを指定することがよさそうです。
Docker環境でも、Mac/WindowsとLinuxでは設定が違う
MacやWindowsのDockerではDockerはLinuxカーネルを必要としています。つまりDocker (Desktop)がこの仮想化レイヤーを管理し、ホストとコンテナ間の通信をしているため、host.docker.internalが立ち上がっています。
反面、Linux環境ではホストがLinuxなのでMacやWindowsほどの仮想化レイヤーがいらない。従ってDNS解決のためのいらないわけです。なるほど確かに。調べてみるとその通りですがhost.docker.internalの設定はもはや一つの記号として見ていたので、調べるまで全然意識していませんでした。
| OS | client_host の設定方法 | 理由 |
|---|---|---|
| Mac/Windows | host.docker.internal | Docker Desktop が仮想ネットワークブリッジを提供 |
| Linux | ホストマシンの実 IP を指定 | Docker がホストと独立したネットワークを使うため |
というわけで、PHPコンテナに組み込むXdebug.iniの設定は以下のようになります。
Xdebugの設定(Linux)
| |
Xdebugの設定(Mac/Windows)
| |
VScodeのlaunch.jsonの設定
| |





