我试图使用xdebug 3与docker在ubuntu 20.04,但我没有得到成功,xdebug没有进入中断点,我已经搜索了所有的东西,没有答案解决我的问题,这将是关于docker主机的问题,因为相同的配置是正确的在windows中,我不知道我还可以尝试解决什么问题,我想要一个帮助来了解我做错了什么,下面是我的配置。
我的docker-compose文件
version: '3.7'
networks:
supervisao:
services:
nginx:
image: nginx:stable-alpine
container_name: supervisao-web
ports:
- "80:80"
volumes:
- .:/var/www/html/
- ./.docker/web/default.conf:/etc/nginx/conf.d/default.conf
depends_on:
- php
- mysql
networks:
- supervisao
mysql:
image: mysql:latest
container_name: supervisao-db
command: --default-authentication-plugin=mysql_native_password
restart: always
tty: true
ports:
- "3306:3306"
volumes:
- ./.docker/mysql/:/var/lib/mysql
environment:
MYSQL_DATABASE: supervisao
MYSQL_USER: user
MYSQL_PASSWORD: pass
MYSQL_ROOT_PASSWORD: pass
SERVICES_TAGS: dev
SERVICES_NAME: mysql
networks:
- supervisao
php:
build:
context: .
dockerfile: Dockerfile
container_name: supervisao-php
volumes:
- .:/var/www/html/
- ./.docker/php/docker-xdebug.ini:/usr/local/etc/php/conf.d/php-docker.ini
ports:
- "9000:9000"
networks:
- supervisao
redis:
image: redis:latest
volumes:
- ./.docker/redis:/data
ports:
- 6379:6379
networks:
- supervisao
我xdebug.ini
# File: docker-xdebug.ini
zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20190902/xdebug.so
xdebug.discover_client_host=1
xdebug.mode = debug
xdebug.start_with_request = yes
xdebug.client_host = host.docker.internal
xdebug.client_port = 9003
xdebug.log = /var/www/html/xdebug.log
我很感激如果有人可以合作,谢谢你
确保在PHP中加载了xdebug 3。创建phpinfo.php文件
<?php
phpinfo();
查看xdebug是否已经被PHP加载并且是版本3
如果xdebug是版本2。那么你可以用pecl来安装v3。如果你有shell访问你的docker盒子,你可以直接尝试pecl命令,看看phpinfo中是否有xdebug v3。
在你的DockerFile中:
# PECL
RUN mkdir -p /tmp/pear/cache
RUN pecl channel-update pecl.php.net
RUN apt install -y php-pear
COPY xdebug.ini "/etc/php/${PHP_VERSION}/mods-available/xdebug.ini"
# The xdebug distributed with Ubuntu 20.04 LTS is v2.9.2, we want v3.0.x
RUN pecl install xdebug
# Enable xdebug by default
RUN phpenmod xdebug
在xdebug.ini
中zend_extension=xdebug.so
xdebug.default_enable = On
xdebug.mode=debug
xdebug.start_with_request=yes
xdebug.discover_client_host=yes
xdebug.max_nesting_level = -1
xdebug.log = "/var/www/log/xdebug.log"
xdebug.output_dir = "/var/www/log/profiler"
现在你可以重建docker盒
docker stop
docker build --no-cache
docker up
检查phpinfo是否启用了设置
如果你有shell访问你的docker盒,你可以查看日志文件。
tail -n 100 /var/www/log/xdebug.log
如果你运行PHP Storm, PHP Storm中有一个很好的验证器>>文件在祝辞设置在比;语言,框架在祝辞PHP在祝辞调试点击链接"验证"。将本地web服务器路径设置为公用文件夹。验证脚本到您的web地址。在共享文件夹上工作良好,在同步文件夹上不太好。
如果你运行Ubuntu作为主机,那么看看防火墙设置。9000/tcp允许在任何地方9003端口也是如此。或者尝试暂时禁用防火墙。
我还添加了端口9003:9003到DockerFile。但我还没有测试过这是否有任何影响。
希望这些对你有帮助。
在我的例子中,禁用防火墙完成了任务- sudo ufw disable