Добрый день всем. Прежде всего, прошу прощения, если этот пост нарушает какие-либо правила сайта. Пишу сюда не часто, поэтому могу упустить некоторые детали. Я также немного тороплюсь, так как эта проблема связана с приложением для моей компании.
Я столкнулся с проблемой, когда 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
Код: Выделить всё
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
Создание пользовательского моста в 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"
Гарантируется, что 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"
Код: Выделить всё
{
"version": "0.2.0",
"configurations": [
{
"name": "Listen for Xdebug",
"type": "php",
"request": "launch",
"port": 9003,
"pathMappings": {
"/app": "${workspaceFolder}"
}
}
]
}
root@container:/app# php -m | grep xdebug
xdebug
Вопрос
Есть ли способ запретить Docker автоматически занимать порты Xdebug (9003 или любой настроенный порт)? Я был бы благодарен за любое решение или обходной путь, поскольку ни один из опробованных мной подходов не сработал. Спасибо!
Подробнее здесь: https://stackoverflow.com/questions/793 ... ing-on-wsl
Мобильная версия