在使用Docker的Ubuntu 20.04中,Xdebug 3无法正常工作

3
我正在尝试在Ubuntu 20.04上使用Docker和xdebug 3,但我没有成功, 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

我希望有人能够合作,谢谢。


在你的docker-compose文件中,你映射了错误的端口。应该是- "9003:9003" - Gianpaolo Scrigna
2个回答

5

确保你已经在PHP中加载了xdebug 3。
创建phpinfo.php文件。

<?php
    phpinfo();

请访问它以检查PHP是否加载了xdebug并且为版本3。

如果xdebug是2.x版本,则可以使用pecl安装v3。如果您有docker容器的shell访问权限,可以直接尝试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中进行检查。

如果您可以访问您的docker box的Shell,您可以查看日志文件。

tail -n 100 /var/www/log/xdebug.log

如果您使用PHP Storm,则可以在PHP Storm中找到优秀的验证器:&gt; 文件&gt;设置&gt;语言和框架&gt; PHP&gt;调试,点击“验证”链接。将本地Web服务器路径设置为公共文件夹。验证脚本为您的Web地址。在共享文件夹上效果很好,在同步的文件夹上效果不佳。
如果您使用Ubuntu作为主机,请查看防火墙设置。"9000 / tcp允许任何地方",端口9003也是如此。或者尝试暂时禁用防火墙。
我还将端口9003:9003添加到DockerFile中。但我没有测试这是否有任何区别。
希望以上内容对您有所帮助。

谢谢。它适用于Docker 20.10,Ubuntu 20.04,xDebug 3和VS Code。client_host不是必需的。 - Oleg Dmitrochenko

0
在我的情况下,禁用防火墙解决了问题 - sudo ufw disable

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接