Docker PHP 配置 VS Code Xdebug PHP 除錯工具: Xdebug for Docker

bigbug發表於2020-06-16

如果是直接使用映象生成的容器,到容器裡面執行:

//安裝xdebug
pecl install xdebug-2.8.1
//啟用xdebug
docker-php-ext-enable xdebug

如果是通過 Dockrfile,則可通過 run 命令定義:

FROM php的一個映象
RUN (balabala) ..\
    && pecl install xdebug-2.8.1 \
    && docker-php-ext-enable xdebug \
    (balabala)

核心配置項是:

xdebug.remote_enable = 1
xdebug.remote_autostart = 1
xdebug.remote_host=192.168.xxx.xxx#填電腦真實的IP,也就是宿主IP
xdebug.idekey=VSCODE

php docker 裡面, 實際沒有明確的 php.ini, 只要把配置檔案放到一個目錄下(/usr/local/etc/php/conf.d/),重啟容器即可,如果是通過 Dockerfile 來定義的容器,則可以先寫好 php.ini,然後使用 copy 命令,複製到配置目錄下即可,如:

FROM php的一個映象
RUN (balabala) ..\
    && pecl install xdebug-2.8.1 \
    && docker-php-ext-enable xdebug \
    (balabala)
COPY php.ini /usr/local/etc/php/conf.d/

編譯之後,啟動容器,然後進入到容器,就可以看到:

root@4ce41612c609:/var/www/html# cd /usr/local/etc/php/conf.d/
root@4ce41612c609:/usr/local/etc/php/conf.d# ls -l
-rw-r--r-- 1 root staff  81 Jun 12 02:59 docker-php-ext-xdebug.ini
-rwxr-xr-x 1 root root  113 Jun 16 01:50 php.ini #只要字尾為.ini就行

一般在 VS Code 裡面開啟一個 PHP 專案,點選除錯工具,它會自動提示生成一個 .vscode 的目錄,在目錄下,會有一個 launch.json,如:

第一步 新增 Xdebug for Docke 配置:

Docker PHP 配置 VS Code Xdebug: Xdebug for Docker

會生成:
Docker PHP 配置 VS Code Xdebug: Xdebug for Docker

第二步 指定 pathMappings 對映關係,如:

也就是指明在 容器裡面目錄 對應 當前本地的目錄

// server -> local
"pathMappings": {
  "/var/www/html": "${workspaceRoot}/www"
}

第三步 翻車現場

設定好以配置後, 設定斷點,然後開啟除錯,不出意料應該會報錯:Error: listen EADDRINUSE: address already in use :::9000,如:
Docker PHP 配置 VS Code Xdebug: Xdebug for Docker

第四步 除錯>除錯工具的問題

VS Code xdebug 外掛 預設主機(hostname)就是 localhost,而 localhost:9000 早就提供給 php-fpm使用,所以報錯,只需要指定主機IP為本機IP即可,即再指明 hostname 配置,如:

{
    "name": "Xdebug for Docker",
    "type": "php",
    "request": "launch",
    "hostname": "192.168.123.119",
    "port": 9000,
    "pathMappings": {
    "/var/www/html/www": "${workspaceFolder}"
    }
}

怎麼看本機IP地址? 在控制檯輸入: ipconfig, Linux? 那就:ifconfig!

不出意外的話,應該能夠正常使用上 xdebug.

本作品採用《CC 協議》,轉載必須註明作者和本文連結

Knowledge is power only when it can be made available and practical.

相關文章