我尝试了许多方法来在Docker容器中让Xdebug工作。我接触到了这些资源:
- 使用Docker Compose和WordPress镜像设置Xdebug
- 在Docker中安装XDebug
- 启动调试器
- 使用Xdebug和PhpStorm进行零配置Web应用程序调试
- PhpStorm的Xdebug和Zend Debugger书签生成器
- 配置Xdebug
- 排除常见的PHP调试问题
- .. 和其他
我认为问题可能要么是我不理解的端口问题,要么是调试器会话未启动或未被识别的问题。对于调试器会话,我还尝试安装了一个设置cookie的浏览器扩展。
最终,我至少有了两个分开的容器,一个作为启用了Xdebug的开发容器。
docker-compose.yml
version: "3"
services:
production:
build: .
ports:
- "8000:80"
volumes:
- .:/var/www/html
development:
build: .
ports:
- "8080:80"
# - "10000:80" also not working
volumes:
- .:/var/www/html
- ./dev.php.ini:/usr/local/etc/php/php.ini
Dockerfile
FROM php:7.4.0-apache
RUN pecl install xdebug \
&& docker-php-ext-enable xdebug
dev.php.ini
xdebug.remote_enable=on
xdebug.remote_host=host.docker.internal
xdebug.remote_port=10000
xdebug.idekey=PHPSTORM
本地主机:8080 phpinfo 数据
PhpStorm配置
有什么想法吗?
remote_host
,这个主机是调试客户端的IP地址,也就是你自己的主机。而且不要认为host.docker.internal
会被解析成你的主机IP地址,因为在Linux上这是一个Docker功能请求,我认为他们还没有发布修复或改进此问题。 - abestradxdebug.remote_host=host.docker.internal
才能正常工作-- https://github.com/docker/for-linux/issues/264。在Linux上,您需要自己查找主机IP地址(例如,使用ip addr
命令并查找docker0
条目)。# - "10000:80" 也不起作用
-- 这种方式将您操作系统中的传入连接转发到容器中。但这是错误的... 因为是Xdebug连接到IDE,而不是反过来。因此,IDE监听Xdebug端口...如果该端口已被Docker使用,则无法建立连接。