在Docker中安装XDebug

Urm*_*Lmn 5 php installation xdebug docker

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

E: Unable to locate package php-xdebug
Run Code Online (Sandbox Code Playgroud)

这是我的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/
Run Code Online (Sandbox Code Playgroud)

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

apt-get install php-xdebug
Run Code Online (Sandbox Code Playgroud)

有人知道问题可能在哪里吗?

先感谢您!

小智 17

尝试这个:

RUN pecl install xdebug && docker-php-ext-enable xdebug
Run Code Online (Sandbox Code Playgroud)

  • 请注意,对于 PHP 5.x,您必须显式指定版本 `pecl install xdebug-2.5.5`,因为较新版本的 xdebug 不再支持 5.x (2认同)

Urm*_*Lmn 14

我通过在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/
Run Code Online (Sandbox Code Playgroud)

  • 到目前为止,我们可以将其中一些缩短为“RUN pecl install xdebug && docker-php-ext-enable xdebug” (4认同)

Ale*_*x P 10

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

RUN pecl install xdebug \
    && docker-php-ext-enable xdebug
Run Code Online (Sandbox Code Playgroud)

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

&& 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 \

Run Code Online (Sandbox Code Playgroud)


Get*_*toX 9

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

RUN pecl install xdebug; \
    docker-php-ext-enable xdebug
Run Code Online (Sandbox Code Playgroud)

以及配置:

        { \
            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; \

Run Code Online (Sandbox Code Playgroud)

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

  • 请注意,另一个重大更改是默认端口已从 9000 更改为 9003,因此,如果您的 IDE 尚未更新并且现在(还)监听 9003,则最后一条 echo 行是必要的,但最好更新或更改您的IDE配置。 (3认同)

小智 5

对于 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
Run Code Online (Sandbox Code Playgroud)

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

extra_hosts:
  - "host.docker.internal:host-gateway" 
Run Code Online (Sandbox Code Playgroud)

我的 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
Run Code Online (Sandbox Code Playgroud)

更多详细信息请参阅描述我在 Docker 设置中进行 PHP 调试的要点