【问题标题】:Installing XDebug in Docker在 Docker 中安装 XDebug
【发布时间】:2018-04-18 19:09:13
【问题描述】:

我正在尝试在 Docker 容器中安装 XDebug,但出现以下错误:

E: Unable to locate package php-xdebug

这是我的 Dockerfile:

FROM php:7.0-apache

RUN a2enmod rewrite

RUN docker-php-ext-install pdo pdo_mysql

RUN apt-get install php-xdebug -y

COPY php.ini /usr/local/etc/php/
COPY . /var/www/html/

当我在我的计算机上运行相同的命令时,XDebug 正在安装且没有任何错误:

apt-get install php-xdebug

问题可能出在哪里?

【问题讨论】:

    标签: php docker installation xdebug


    【解决方案1】:

    我通过在我的 Docker 文件中添加以下行来解决这个问题:

    FROM php:7.0-apache
    
    RUN a2enmod rewrite
    
    RUN docker-php-ext-install pdo pdo_mysql
    
    RUN yes | pecl install xdebug \
        && echo "zend_extension=$(find /usr/local/lib/php/extensions/ -name xdebug.so)" > /usr/local/etc/php/conf.d/xdebug.ini \
        && echo "xdebug.remote_enable=on" >> /usr/local/etc/php/conf.d/xdebug.ini \
        && echo "xdebug.remote_autostart=off" >> /usr/local/etc/php/conf.d/xdebug.ini
    
    
    COPY php.ini /usr/local/etc/php/
    COPY . /var/www/html/
    

    【讨论】:

    • 嗨,当我将它与localhost 一起使用时,网络服务器没有响应。你有什么暗示,我冷做什么?
    • @Bernhard,也许你在启动容器时忘记使用 -p 来绑定端口?无论哪种方式,您都可以使用完整的 dockerfile 和您使用的命令开始一个新问题 :-)。
    • @UrmLnm 感谢您的回复。虽然它可以工作,即使我不知道是什么让它工作。我想为 IntelliJ 构建一个测试项目 - 这很有效。然后我尝试了我的真实项目,它也很有效。可能是因为重新启动、docker 更新或其他原因。
    • 现在我们可以将其中的一部分缩短为RUN pecl install xdebug && docker-php-ext-enable xdebug
    • 在我的例子中,这个命令帮助了RUN pecl install xdebug-2.9.0 && docker-php-ext-enable xdebug
    【解决方案2】:

    试试这个:

    RUN pecl install xdebug && docker-php-ext-enable xdebug
    

    【讨论】:

    • 请注意,对于 PHP 5.x,您必须明确指定版本 pecl install xdebug-2.5.5,因为新版本的 xdebug 不再支持 5.x
    【解决方案3】:

    从 PHP 7.4 开始,您只需要这个

    RUN pecl install xdebug \
        && docker-php-ext-enable xdebug
    

    并添加此行以启用远程调试

    && echo "xdebug.remote_enable=on" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
    && echo "xdebug.remote_host = host.docker.internal" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
    
    

    【讨论】:

    • 我猜 host.docker.internal 只是 mac ......如果你在 ubuntu 上你应该使用 172.17.0.1
    【解决方案4】:

    对于 PHP 7.3,我可以使用 mlocati 的 docker-php-extension-installer 安装 XDebug。

    我的 Dockerfile 看起来像这样:

    FROM php:7.3-apache
    COPY --from=mlocati/php-extension-installer /usr/bin/install-php-extensions /usr/local/bin/
    RUN install-php-extensions xdebug @composer
    

    我的docker-compose.yml 包含以下允许特殊的host.docker.internal 名称:

    extra_hosts:
      - "host.docker.internal:host-gateway" 
    

    我的 xdebug 配置文件/usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini 是这样的:

    [xdebug]
    zend_extension=xdebug
    xdebug.mode=develop,debug
    xdebug.start_with_request = yes
    xdebug.client_host = "host.docker.internal"
    xdebug.client_ip = "9003"
    xdebug.idekey="VSCODE"
    xdebug.log=/tmp/xdebug_remote.log
    

    更多详情请见Gist describing my PHP Debugging in Docker setup

    【讨论】:

    • xdebug.client_ip: 你的意思是xdebug.client_port 我希望?
    【解决方案5】:

    自 xdebug 版本 3 以来,配置名称发生了重大变化。

    RUN pecl install xdebug; \
        docker-php-ext-enable xdebug
    

    对于配置:

            { \
                echo "xdebug.mode=debug"; \
                echo "xdebug.start_with_request=yes"; \
                echo "xdebug.client_host=host.docker.internal"; \
                echo "xdebug.client_port=9000"; \
            } > /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini; \
    
    

    更多信息:https://xdebug.org/docs/upgrade_guide

    【讨论】:

    • 请注意,另一个重大更改是默认端口已从 9000 更改为 9003,因此如果您的 IDE 尚未更新并且现在(也)侦听 9003,则最后一个 echo 行是必要,但最好更新或更改您的 IDE 配置。
    • 您介意解释一下“and for configuration”部分的位置吗?
    • 这是一个 bash 脚本(用于 dockerfile),它会自动将正确的 php/xdebug 配置放入 docker-php-ext-xdebug.ini 文件中。
    • @MikeiLL 如果你像我一样使用 Dockerfile,你可以像这样把 xdebug 配置设置进去:RUN echo "xdebug.mode=debug" >> $PHP_INI_DIR/conf.d/xdebug.ini ...
    【解决方案6】:

    我在 dockerfile 中使用了php8.0-alpine。 我在容器中安装xdebug 时遇到问题, 所以我将图像更改为php8.0-alpine3.13 并且工作正常。 似乎 3.14 的 xdebug 出现了一些问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多