Xdebug не работает в среде докера (работает на WSL)Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Xdebug не работает в среде докера (работает на WSL)

Сообщение Anonymous »

Проблема с Xdebug в Docker, автоматически занимающим порт 9003
Добрый день всем. Прежде всего, прошу прощения, если этот пост нарушает какие-либо правила сайта. Пишу сюда не часто, поэтому могу упустить некоторые детали. Я также немного тороплюсь, так как эта проблема связана с приложением для моей компании.
Я столкнулся с проблемой, когда Xdebug работает в контейнере Docker внутри среды WSL (да , виртуальная машина внутри другой виртуальной машины). Я установил Xdebug в свой контейнер Docker, и он правильно отображается в phpinfo(). Однако я не могу его использовать, поскольку Docker автоматически занимает порт, настроенный для Xdebug (9003), как только я пытаюсь начать отладку в VS Code.
В моем файле xdebug.ini я Я установил следующую конфигурацию:

Код: Выделить всё

zend_extension=xdebug.so
xdebug.mode=debug
xdebug.start_with_request=yes
xdebug.client_host=host.docker.internal
xdebug.client_port=9003
xdebug.idekey=docker
xdebug.log=/tmp/xdebug.log
xdebug.log_level=7

Конфигурация host.docker.internal вызывает серьезную проблему. Всякий раз, когда я запускаю Xdebug в VS Code, Docker автоматически занимает указанный порт (9003 или любой другой порт, который я настрою). Я проверил это с помощью PowerShell с помощью команды netstat -ano | findstr :9003, который показывает, что порт используется процессами Docker:

Код: Выделить всё

TCP    0.0.0.0:9003           0.0.0.0:0             LISTENING       9508 TCP    [::]:9003              [::]:0                LISTENING       9508 TCP    [::1]:9003             [::]:0                LISTENING       16556 
Что я уже пробовал
Изменение xdebug.client_host на xdebug.discover_client_host=1:

Код: Выделить всё

zend_extension=xdebug.so
xdebug.mode=debug
xdebug.start_with_request=yes
xdebug.discover_client_host=1
xdebug.client_port=9003
xdebug.idekey=docker
xdebug.log=/tmp/xdebug.log
xdebug.log_level=7
Это тоже не сработало. Xdebug запускается, но не может подключиться, поскольку локальный хост в Docker относится к самому контейнеру, а не к хост-приложению.
Создание пользовательского моста в docker-compose.yml:

Код: Выделить всё

version: "3"
networks:
debug_network:
driver: bridge

services:
web:
networks:
- debug_network
build:
context: ./docker
dockerfile: Dockerfile
ports:
- "8000:80"
volumes:
- .:/app
- ./docker/xdebug.ini:/usr/local/etc/php/conf.d/xdebug.ini
environment:
- XDEBUG_MODE=debug
db:
image: mysql:8.0
networks:
- debug_network
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: database
ports:
- "3306:3306"
Даже при такой настройке Docker по-прежнему занимает порт отладки.
Гарантируется, что php.ini не переопределяет xdebug.ini.
Конфигурация Docker Compose

Код: Выделить всё

version: "3"
services:
web:
build:
context: ./docker
dockerfile: Dockerfile
ports:
- "8000:80"
- "9003:9003"
volumes:
- .:/app
- ./docker/xdebug.ini:/usr/local/etc/php/conf.d/xdebug.ini
environment:
- XDEBUG_MODE=debug
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: database
ports:
- "3306:3306"
launch.json для VS Code

Код: Выделить всё

{
"version": "0.2.0",
"configurations": [
{
"name": "Listen for Xdebug",
"type": "php",
"request": "launch",
"port": 9003,
"pathMappings": {
"/app": "${workspaceFolder}"
}
}
]
}
Проверка Xdebug
root@container:/app# php -m | grep xdebug
xdebug
Вопрос
Есть ли способ запретить Docker автоматически занимать порты Xdebug (9003 или любой настроенный порт)? Я был бы благодарен за любое решение или обходной путь, поскольку ни один из опробованных мной подходов не сработал. Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/793 ... ing-on-wsl
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»