繁体   English   中英

如何在 docker 的官方 php-fpm-alpine 镜像上安装 XDebug?

[英]How do I install XDebug on docker's official php-fpm-alpine image?

I'm using wordpress:php7.1-fpm-alpine which is based on php:7.1-fpm-alpine ( https://github.com/docker-library/wordpress/blob/master/php7.1/fpm-alpine /Docker 文件)。

我试过RUN pecl install xdebug-2.5.0 && docker-php-ext-enable xdebug

在构建时导致错误:

Step 19/19 : RUN pecl install xdebug-2.5.0     && docker-php-ext-enable xdebug
 ---> Running in 52c988e12cb2
downloading xdebug-2.5.0.tgz ...
Starting to download xdebug-2.5.0.tgz (267,640 bytes)
........................................................done: 267,640 bytes
76 source files, building
running: phpize
Configuring for:
PHP Api Version:         20160303
Zend Module Api No:      20160303
Zend Extension Api No:   320160303
Cannot find autoconf. Please check your autoconf installation and the
$PHP_AUTOCONF environment variable. Then, rerun this script.

以下内容足以在该图像上简单地安装 xdebug:

FROM wordpress:php7.1-fpm-alpine

RUN apk add --no-cache $PHPIZE_DEPS \
    && pecl install xdebug-2.5.0 \
    && docker-php-ext-enable xdebug

构建它然后从结果图像内的 shell 运行会产生以下内容:

$ php -i | grep Xdebug
    with Xdebug v2.5.0, Copyright (c) 2002-2016, by Derick Rethans

如果您担心图像大小,可以删除依赖项:

FROM wordpress:php7.1-fpm-alpine 
RUN apk --update --no-cache add autoconf g++ make && \
    pecl install -f xdebug && \
    docker-php-ext-enable xdebug && \
    apk del --purge autoconf g++ make

很好的答案@msanchez_aplyca。 虽然通过apk更正确地删除构建依赖项是:

RUN apk add --no-cache --virtual .build-deps $PHPIZE_DEPS \
    && pecl install xdebug-2.5.0 \
    && docker-php-ext-enable xdebug \
    && apk del -f .build-deps

对于 PHP >= 7.2 你需要使用 Xdebug 2.6.0+

例如,安装 Xdebug 3.0.0(2020 年 11 月 25 日发布)

兼容 PHP 8.0

RUN apk add --no-cache --virtual .build-deps $PHPIZE_DEPS \
    && pecl install xdebug-3.0.0 \
    && docker-php-ext-enable xdebug \
    && apk del -f .build-deps

现在你通过添加类似的东西来设置它(使用 Xdebug 3.0.0 语法,更多信息在这里):

# Configure Xdebug
RUN echo "xdebug.start_with_request=yes" >> /usr/local/etc/php/conf.d/xdebug.ini \
    && echo "xdebug.mode=debug" >> /usr/local/etc/php/conf.d/xdebug.ini \
    && echo "xdebug.log=/var/www/html/xdebug/xdebug.log" >> /usr/local/etc/php/conf.d/xdebug.ini \
    && echo "xdebug.discover_client_host=1" >> /usr/local/etc/php/conf.d/xdebug.ini \
    && echo "xdebug.client_port=9000" >> /usr/local/etc/php/conf.d/xdebug.ini

xdebug 可以通过 apk 安装,但需要一些调整

确定您的 PHP 扩展和配置目录

  1. php -i的 output 复制到剪贴板。
  2. Go 到xdebug 安装向导并将结果粘贴到框中。
  3. 将这个 output 放在手边,因为我们稍后会用到它。 我们主要关注Extra Configuration Files PathExtensions 目录 示例 xdebug 安装向导 output

找出apk package 的安装位置

您的结果可能会因您 select 的版本而异。

您可以通过查看 xdebug文档找到可用的版本。 在撰写本文时,仅列出了主要的 PHP 版本,但我能够手动指定功能版本。 只是不要包括点(例如, 81 NOT 8.1 )。

运行apk info -a php<your-php-version>-pecl-xdebug以获取 package 的内容。

根据apk info -a php81-pecl-xdebug ,我的位置是:

php81-pecl-xdebug-3.1.5-r0 contains:
etc/php81/conf.d/50_xdebug.ini
usr/lib/php81/modules/xdebug.so

创建您的 xdebug 配置

我喜欢将我的 xdebug.ini 保存在我的 VS Code.devcontainer 文件夹中,所以这就是我在本示例中将遵循的路线。 您还可以直接在其目标中创建配置文件。

如果您采用后一种路径,请根据文档将文件命名为99-xdebug.ini

无论哪种情况,您真正需要的只是启用 xdebug 的这一行。

zend_extension=xdebug

需要额外的选项来使它做任何有用的事情,但我会把它留给读者。

创建您的 Dockerfile

在您的 dockerfile 中,安装 package 并根据前面的步骤链接/复制文件。 例如:

ADD <local_xdebug.ini_path> <PHP Extra Configuration Files Path>99-xdebug.ini
RUN apk update && apk add php<version>-pecl-xdebug && \
    ln -s /<apk_xdebug.so_path> \
    <PHP Extensions directory>

就我而言:

ADD ./xdebug.ini /usr/local/etc/php/conf.d/99-xdebug.ini
RUN apk update && apk add php81-pecl-xdebug && \
    ln -s /usr/lib/php81/modules/xdebug.so \
    /usr/local/lib/php/extensions/no-debug-non-zts-20210902/xdebug.so

重建容器并验证 xdebug 已启用

重建容器后,通过运行php -m验证是否安装了 xdebug 模块

我是一个 PHP 假人,所以我像以前一样使用xdebug 安装向导来验证 xdebug 是否已启用。

希望这可以为其他人节省几个令人沮丧的时间。

已安装 xdebug

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM