将Xdebug与php-fpm和nginx容器分开

时间:2018-11-09 14:47:07

标签: php docker nginx xdebug devops

我想将所有开发工具与主要的php-fpm和nginx容器分开。因此,我基本上有3个名为 php-fpm 的容器在端口9000上运行, nginx 在端口80和 dev-tools 上运行。我已经在我的dev-tools容器上安装了xdebug,composer等,但是我对如何配置xdebug感到困惑,以便它可以与php-fpm容器一起使用并可以调试我的网站?第二个问题xdebug是否需要php-cli或php-fpm才能运行?

#dev-tools

FROM php:7.2-cli-alpine

# Install the PHP extensions we need
RUN set -ex \
    && curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin -- --filename=composer.phar \
    && apk add --no-cache git \
    && pecl install xdebug \
    && docker-php-ext-enable xdebug

1 个答案:

答案 0 :(得分:3)

xdebug默认使用端口9000,该端口与PHP-FPM端口冲突。

您需要更改PHP-FPM池配置的分配端口或php.ini中的xdebug。我建议更新您的PHP-FPM配置以侦听其他端口,因为使用xdebug进行调试的配置较少。

如果您想在PHP-FPM中更改端口。

/php-fpm.d/pool.conf

[pool]
listen = 127.0.0.1:9001

适当地更新NGINX配置以使用新端口。

否则,如果您想在PHP中更改xdebug端口。

php.ini

[xdebug]
xdebug.remote_port=9001

将调试(PHP编辑器/ IDE)软件和防火墙配置更新到新端口。或者,使用SSH隧道将新的远程端口9001转发到默认的本地端口9000


关于第二个问题

如果

xdebug设置为在PHP ini设置中加载,则xdebug仅作为PHP的扩展(php-fpm)运行。它不能作为单独的后台服务运行。

示例:

[Browser Client -> http://example.com/path/to/script.php] 
   in -> [NGINX] 
        in -> [php-fpm /path/to/script.php] 
[xdebug remote host:port] <- out

[terminal command line] 
    in -> [php /path/to/script.php] 
[xdebug remote host:port] <-out

所以是的,xdebug需要php-fpm或php-cli才能运行,因为它们是相同的。

如果通过使用php-fpm的Apache / NGINX,则需要将其加载到您的fpm配置中。如果通过CLI界面,则需要将其加载到CLI配置中。

请记住,您可以基于环境使用不同的ini配置运行PHP。参见PHP - The configuration file