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

Posted

技术标签:

【中文标题】如何在 docker 的官方 php-fpm-alpine 镜像上安装 XDebug?【英文标题】:How do I install XDebug on docker's official php-fpm-alpine image? 【发布时间】:2018-03-31 05:34:28 【问题描述】:

我正在使用基于php:7.1-fpm-alpine (https://github.com/docker-library/wordpress/blob/master/php7.1/fpm-alpine/Dockerfile) 的wordpress:php7.1-fpm-alpine

我试过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.

【问题讨论】:

github.com/docker-library/wordpress/issues/244 提供的解决方案有效吗? 嗯,我真的不认为这是完整的解决方案。我需要确定所有的依赖关系。 【参考方案1】:

以下内容足以在该映像上简单地安装 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

【讨论】:

如果您使用非基于 Alpine 的基础镜像,请使用 apt 而不是 apk,例如RUN apt -qy install $PHPIZE_DEPS && pecl install xdebug-2.5.0 && docker-php-ext-enable xdebug 在我的情况下,它可以完美地与 CLI 一起运行,但不能与 FPM 一起运行。因此,php -i 并没有给出全貌。如果有人有建议,我仍在努力解决。 我讨厌 phpize$PHPIZE_DEPS 在 docker hub 页面中从未提及。 对于使用 php:7.3-fpm-alpine 及更高版本的用户,请记住从 xdebug 包中删除“-2.5.0”。所以不是输入install xdebug-2.5.0,而是输入install xdebug 我建议不要删除 2.5.0,而是将其更新到 3.0.4 (pecl.php.net/package/xdebug),这样您仍然知道您正在获取哪个版本,并且有一个明确的位置来创建自然缓存当你需要/想要更新它时破产。【参考方案2】:

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

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

【讨论】:

很好的答案。【参考方案3】:

很好的答案@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

【讨论】:

【参考方案4】:

对于 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 语法,more info here):

# 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

【讨论】:

以上是关于如何在 docker 的官方 php-fpm-alpine 镜像上安装 XDebug?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 CentOS 7 上安装 Docker

如何在官方 docker php 映像上以非 root 用户身份运行 composer

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

如何在 docker php 官方镜像实例中添加 Zend Guard Loader 支持?

如何使用官方的 docker elasticsearch 容器?

如何使用官方Tensorflow docker容器在主机目录中保存和编辑Jupyter笔记本?