Установка Xdebug в докер для PHP 7.4

Я пытаюсь настроить модульные тесты и тестовое покрытие для проекта PHP 7.4 с использованием PHPUnit 9.x. Мне удалось заставить его работать локально, но мне трудно заставить его работать в конвейере на GitLab, который просто использует Docker под капотом. Я использую изображение php:7.4. На данный момент тесты выполняются, но отчет о покрытии пропускается с предупреждением:

Драйвер покрытия кода недоступен

Я пытался установить Xdebug 3.1.5, так как это последняя версия, поддерживающая PHP 7.4. Судя по ряду других тем на Stack Overflow и других сайтах, большинство людей предлагают запустить эти две команды:

pecl install xdebug-3.1.5
docker-php-ext-install xdebug

Когда они запускаются, второй выдает ошибку

/usr/src/php/ext/xdebug не существует

Запуск docker-php-ext-install xdebug-3.1.5 дает такую ​​же ошибку. Я также пытался вообще пропустить вторую команду, но все равно получаю предупреждение от phpunit об отсутствии драйвера покрытия.

Как мне установить xdebug-3.1.5, чтобы получить отчет о покрытии от PHPUnit?

docker-php-ext-enable xdebug* а не docker-php-ext-install, на самом деле он есть в документации: hub.docker.com/_/php в главе "Расширения PECL".
β.εηοιτ.βε 03.04.2023 12:05

@β.εηοιτ.βε docker-php-ext-enable xdebug сделал свое дело. Спасибо! Не стесняйтесь поделиться им как ответом, чтобы я мог отметить его как таковой.

inventor96 05.04.2023 00:10
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
1
2
141
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Как следует из названия, команда docker-php-ext-install предназначена для установки расширения PHP — файла .so. Использование PECL — это просто еще один способ установки расширений, поэтому, пытаясь использовать docker-php-ext-install после pecl install, вы пытаетесь сделать одно и то же дважды.

И как указывает конец pecl install:

Вы должны добавить «zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20190902/xdebug.so» в php.ini

Именно для этого предназначен docker-php-ext-enable.

Итак, ваш рабочий файл Dockerfile будет таким:

FROM php:7.4

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

На самом деле это указано в документации к изображению php:

Расширения PECL

Некоторые расширения не поставляются с исходным кодом PHP, а вместо этого доступны через PECL. Чтобы установить расширение PECL, используйте pecl install, чтобы загрузить и скомпилировать его, затем используйте docker-php-ext-enable, чтобы включить его:

FROM php:7.4-cli
RUN pecl install redis-5.1.1 \
      && pecl install xdebug-2.8.1 \
      && docker-php-ext-enable redis xdebug

Source: https://hub.docker.com/_/php

Другие вопросы по теме