我將本地開發設定從 Linux 移植到新的 Mac 機器上,但在讓 Xdebug 與 Mac M1 Pro 機器上的 PhpStorm 一起作業時遇到了問題。
我有一個裝有 PHP 的容器,其中安裝和配置了 Xdebug,如下所示:
zend_extension=/usr/lib/php8/modules/xdebug.so
xdebug.mode=debug
xdebug.idekey=PHPSTORM
xdebug.client_port=9001
xdebug.start_with_request=yes
xdebug.discover_client_host=1
xdebug.log=/var/log/xdebug.log
在 PhpStorm 中,我正在監聽埠 9001(我將 9000 用于其他服務)。
這是 docker 容器中的 Xdebug 日志,位于/var/log/xdebug.log
/var/www/html/app # tail -f /var/log/xdebug.log
[49] [Step Debug] INFO: Checking header 'HTTP_X_FORWARDED_FOR'.
[49] [Step Debug] INFO: Checking header 'REMOTE_ADDR'.
[49] [Step Debug] INFO: Client host discovered through HTTP header, connecting to 172.18.0.4:9001.
[49] [Step Debug] WARN: Creating socket for '172.18.0.4:9001', poll success, but error: Operation in progress (29).
[49] [Step Debug] WARN: Could not connect to client host discovered through HTTP headers, connecting to configured address/port: localhost:9001. :-|
[49] [Step Debug] WARN: Creating socket for 'localhost:9001', poll success, but error: Operation in progress (29).
[49] [Step Debug] WARN: Creating socket for 'localhost:9001', connect: Address not available.
[49] [Step Debug] ERR: Could not connect to debugging client. Tried: 172.18.0.4:9001 (from REMOTE_ADDR HTTP header), localhost:9001 (fallback through xdebug.client_host/xdebug.client_port) :-(
[49] Log closed at 2022-03-15 16:28:46.957669
我不明白為什么連接沒有發生/失敗。
我還有一個docker-compose.yml檔案,上面的服務 API 為
api:
build:
context: .
expose:
- 8080
container_name: api
我已經嘗試了什么?
- 將 xdebug.ini 配置更改為使用遠程主機
docker.for.mac.localhost,host.docker.internal但沒有成功。 - 更改
start_with_request=trigger為yes. - 禁用 Mac 防火墻,認為 Docker 可能無法使用埠 9001。
uj5u.com熱心網友回復:
xdebug.discover_client_host=1與 Docker 一起使用肯定不正確,您需要將其設定為 0。discover_client_host使用 HTTP 標頭查看請求的來源,但隨著 NAT 與 Docker Xdebug(和 PHP)的關系,將看到 IP 地址或主機名它無法連接到。
使用 Docker設定xdebug.client_host=host.docker.internal應該是正確的,這應該是網路網關地址,這也是你的主機。
(即使, 因為如果 Xdebug無法連接到它通過 HTTP 標頭發現找到的不正確的設定,它將xdebug.discover_client_host=1回退到該設定。)xdebug.client_host
如果您想查看更詳細的日志,還可以添加xdebug.log_level=10,這應該可以提供更多洞察力。
Xdebug不需要“系結埠” docker-compose.yaml,因為 Xdebug 確實連接到IDE,因此不需要公開埠來接收連接。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/444526.html
上一篇:Vue3
