Как прослушивать брэйкпоинты в тестах внутри контейнера?

Предисловие. Есть phpunit тесты внутри докер контейнера. Хочу прослушать брэйкпоинты в тестах внутри контейнера. Обычный дебаггер настроил и он работает как надо, но только с помощью расширения для браузера хром. Но когда проставляю брэйкпоинты в тестах в редакторе и запускаю тесты внутри контейнера, то они разумеются не прерывают выполнение в брэйкпоинтах, а консоль просто выплевывает на меня палитру из зеленых и красных тестов.

Найденные пути решения. Изрыл очень много всего и нашел очень скудный набор того, что можно сделать (хотя странно, ведь проблема вроде как на поверхности).

  • Было найдено решение для phpstorm, а я использую vscode, хотя в том решении я тоже если честно не уверен. Ресурс был один, комментов к статье не было, статья была на английском вдруг что-то не то понял. Ссылка: https://www.linkedin.com/pulse/phpstorm-docker-phpunit-xdebug-hernan-arregoces
  • Открывать контейнер непосредственно в редакторе и оттуда дебажить тесты. Звучит супер и вроде как просто, но vscode с подключенным расширением conteiner dev на любой контейнер выплёвывает ошибку: Retrying to download VS Code Server. Error: XHR failed at v.onerror. Полный лог ошибки очень длинный и если надо, то прикреплю, но в целом косяк, как видно из этого куска, в ошибке установки vs code server из проблем с подключением\проксей\случайности\звёзды не сошлись. Прокси\впн\дедики\бубны не использую. Ссылка: https://stackoverflow.com/questions/67888321/how-to-hit-vscode-breakpoints-in-unit-tests-from-within-a-docker-compose-setup-r#:~:text=If%20you've%20landed%20here,Then%20everything%20will%20just%20work.
  • Третье решение, но по нему тоже не особо много нашел, хотя в него и не верю: это установка chrome dev tools еще одним контейнером чтобы закидывать хромовский дебаггер вместе с тестами, но я без понятия как это будет работать и почему и есть ли вообще такой образ на докерхабе. Ссылки нет, т.к. это был коммент к какому-то посту, то ли видео, в общем не смог найти.
  • Четвертое решение похожее на третье, но здесь вообще не понимаю, что происходит. Зачем создавать отдельный контейнер для дебаггинга? Ссылка: https://www.giulioprinaricotti.com/vscode-docker-phpunit-xdebug-setup/

Вопрос. Как мне дебажить тесты внутри докер контейнера? Какой способ из предложенных наиболее правильный? Лично я больше всего склоняюсь ко второму, но как исправить ошибки загрузки расширения тоже не знаю. (Гуглил, но нашел только один тред и там ругают прокси, который я не использую. Если надо, то ссылку на тред приложу.) Какие способы есть помимо предложенных?

Ресурсы. Dockerfile образа

FROM php:8.1.16-fpm

# Copy composer.lock and composer.json
COPY composer.lock composer.json /var/www/

# Set working directory
WORKDIR /var/www

# Install dependencies
RUN apt-get update && apt-get install -y \
      apt-utils \
      libpq-dev \
      libpng-dev \
      libzip-dev \
      zip unzip \
      git && \
      docker-php-ext-install pdo && \
      docker-php-ext-install pdo_pgsql && \
      docker-php-ext-install pgsql && \
      docker-php-ext-install bcmath && \
      docker-php-ext-install gd && \
      docker-php-ext-install zip && \
      apt-get clean && \
      rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

# Install XDebug
RUN pecl install xdebug \
    && docker-php-ext-enable xdebug

# Install composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

# Add user for laravel application
RUN groupadd -g 1000 www
RUN useradd -u 1000 -ms /bin/bash -g www www

# Copy existing application directory contents
COPY . /var/www

# Copy existing application directory permissions
COPY --chown=www:www . /var/www

# Change current user to www
USER www

# Expose port 9000 and start php-fpm server
EXPOSE 9000
CMD ["php-fpm"]

Кусок docker-compose.yaml с образом

...
backend:
    build: 
      context: ./backend
      dockerfile: _docker/app/Dockerfile
    volumes:
      - ./backend/:/var/www/
    depends_on:
      - db
    user: "1000:1000"
    environment:
      XDEBUG_MODE: debug
      XDEBUG_CONFIG: client_host=host.docker.internal client_port=9003
    container_name: project_backend
    networks:
      - app-network
...

launch.json для встроенного дебаггера vscode

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Listen for Xdebug",
            "type": "php",
            "request": "launch",
            "port": 9003,
            "pathMappings": {
                "/var/www": "${workspaceFolder}/backend"
            },
        }
    ]
}

Ответы (0 шт):