如何解决在 WordPress Dev Env 中设置 XDebug 3 (Docker + WSL 2)
我无法在 Docker + WSL 2 中的 WP Dev Env 上使用 XDebug 3 进行步骤调试
这是我的文件夹结构
忽略references.txt文件,这里没有用。
wordpress 文件夹将包含所有 wordpress 文件。它在开始时是一个空文件夹,但在通过 docker-compose up 设置开发环境时将填充 wordpress 文件。
注意:所有这些文件都在通过 WSL 2 安装的 ubuntu 20.04 中。
docker-compose.yml 文件
version: "3.9"
services:
db:
image: MysqL:5.7
command: --default-authentication-plugin=MysqL_native_password
restart: always
environment:
MysqL_DATABASE: "wordpress"
MysqL_USER: "wp"
MysqL_PASSWORD: "secret"
MysqL_ROOT_PASSWORD: "secret"
volumes:
- db_data:/var/lib/MysqL
ports:
- 4406:3306
wp:
build:
context: ./build
dockerfile: Dockerfile
image: wp-local
restart: always
depends_on:
- db
environment:
wordpress_DB_HOST: db:3306
wordpress_DB_NAME: "wordpress"
wordpress_DB_USER: "wp"
wordpress_DB_PASSWORD: "secret"
wordpress_DEBUG: 1
wordpress_CONfig_EXTRA: |
define( 'WP_DEBUG_LOG',true );
define( 'WP_DEBUG_disPLAY',false );
/* https://gist.github.com/dianjuar/1b2c43d38d76e68cf21971fc86eaac8e */
define( 'FS_METHOD','direct' ); // required to allow installing of plugins without the need for ftp access
volumes:
- ~/local_wp/wordpress:/var/www/html
ports:
- 8888:80
PHPmyadmin:
image: PHPmyadmin
restart: always
depends_on:
- db
ports:
- 9999:80
environment:
MysqL_USER: "wp"
MysqL_PASSWORD: "secret"
MysqL_ROOT_PASSWORD: "secret"
volumes:
db_data:
注意:是的,我特意在 wp 中映射了 ~/local_wp/wordpress 而不是 ./wordpress > 服务,我注意到如果我使用后者,它有点慢?我不知道为什么?它像安装 wp 插件一样慢,如果我使用后者需要一分钟,但对于前者,它只需要 9-10 秒。
构建/Dockerfile
FROM wordpress:5.7.2-PHP7.4-apache
copY ./PHP.ini /usr/local/etc/PHP/PHP.ini
# Install xdebug
RUN pecl install xdebug && docker-PHP-ext-enable xdebug
# copy our xdebug.ini into the location the container's xdebug.ini
copY ./xdebug.ini /usr/local/etc/PHP/conf.d/docker-PHP-ext-xdebug.ini
ENTRYPOINT ["docker-entrypoint.sh"]
CMD ["apache2-foreground"]
PHP.ini 文件确实只有我在这里复制的默认内容https://github.com/php/php-src/blob/master/php.ini-development ,这里没什么特别的。
xdebug.ini
zend_extension=xdebug
[xdebug]
xdebug.mode = debug
xdebug.start_with_request = yes
xdebug.client_host = host.docker.internal
xdebug.client_port = 9000
我似乎再次无法使步骤调试工作。顺便说一句,我将 php debug extension 用于 VS Code 并按照其说明进行操作,但还是不行。
我也在 wordpress 的 debug.log 上得到了这个
[30-May-2021 02:34:11 UTC] Xdebug: [Step Debug] Time-out connecting to debugging client,waited: 200 ms. Tried: host.docker.internal:9000 (through xdebug.client_host/xdebug.client_port) :-(
我尝试在 docker-compose.yml 文件上公开端口 9000,但不起作用。
我尝试从 xdebug.ini 中删除 xdebug.client_host = host.docker.internal,它不起作用。
我尝试在 docker-compose.yml 文件上公开端口 9000、9001、9002、9003,因为我注意到它有时使用端口 9000,有时使用 9003,但仍然不起作用。
非常感谢任何帮助。
提前致谢。
解决方法
php.ini 文件实际上只有我在这里复制的默认内容 https://github.com/php/php-src/blob/master/php.ini-development ,这里没有什么特别的。
我建议不要这样做。只需将文件留空,然后仅输入您要对默认值进行的更改。 PHP 不需要填充的 php.ini
文件。
我尝试在 docker-compose.yml 文件上公开端口 9000,但不起作用。
在 docker-compose.yml 中暴露任何 Xdebug 端口是行不通的,因为是 Xdebug 建立连接,而暴露的端口仅用于传入连接。
在这种情况下,它试图连接到端口 host.docker.internal
上的 9000
,但它不能。
我尝试在 docker-compose.yml 文件上公开端口 9000、9001、9002、9003,因为我注意到它有时使用端口 9000,有时使用 9003,但仍然不起作用。
同样,暴露它不会有任何作用。确实,Xdebug 有时会默认使用端口 9000 或端口 9003,第一个是 Xdebug 2 的默认值,第二个是 Xdebug 3 的默认值。但是您已经配置了 {{1 }} 使用端口 9000,所以没关系。
请确保 VS Code 配置也确实提到了端口 9000。
我尝试从 xdebug.ini 中删除 xdebug.client_host = host.docker.internal,它不起作用。
Xdebug 需要知道要连接到哪个主机,并且该主机需要在同一个(docker 内部?)网络中可见和可联系。
xdebug.client_port
在 Linux 上不起作用(这就是 WSL2)。您要么需要配置运行 IDE 的机器的真实 IP,或者,如果您运行的是足够新的 Docker 引擎 (20.10.x),则可以在 {{ 1}} 服务:
host.docker.internal
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。