#docker #phpstorm #magento2 #xdebug
#docker #phpstorm #magento2 #xdebug
Вопрос:
У меня запущена среда Docker.
Чтобы запустить Xdebug, я выполнил шаги с этой страницы: https://devdocs.magento.com/cloud/docker/docker-development-debug.html
Когда я пытаюсь включить «Начать прослушивание подключений для отладки PHP», я получаю сообщение об ошибке:
Не удается начать прослушивание подключений из «xdebug»: порт 9001 занят
Кто-нибудь знает, как правильно настроить Magento в docker с помощью Xdebug?
РЕДАКТИРОВАТЬ: вся среда выглядит следующим образом:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
19d92752c73a magento/magento-cloud-docker-tls:latest-1.1 "/entrypoint.sh" 4 seconds ago Up 3 seconds 0.0.0.0:443->443/tcp mymagento_tls_1
b71dd39b46c3 magento/magento-cloud-docker-nginx:latest-1.1 "/docker-entrypoint.…" 4 seconds ago Up 4 seconds (health: starting) 0.0.0.0:80->80/tcp, 443/tcp mymagento_web_1
311e04f363b3 magento/magento-cloud-docker-php:7.3-fpm-1.1 "/docker-entrypoint.…" 5 seconds ago Up 4 seconds (health: starting) 9000/tcp mymagento_fpm_1
cbdf9246f3e9 magento/magento-cloud-docker-php:7.3-fpm-1.1 "/docker-entrypoint.…" 35 seconds ago Up 33 seconds (healthy) 9000/tcp, 0.0.0.0:9001->9001/tcp mymagento_fpm_xdebug_1
2f1b4f2f9e23 magento/magento-cloud-docker-elasticsearch:6.5-1.1 "/usr/local/bin/dock…" 36 seconds ago Up 35 seconds (healthy) 9200/tcp, 9300/tcp mymagento_elasticsearch_1
d818c0755f4c mariadb:10.2 "docker-entrypoint.s…" 36 seconds ago Up 35 seconds (healthy) 0.0.0.0:32807->3306/tcp mymagento_db_1
19e266fbb72a redis:5.0 "docker-entrypoint.s…" 36 seconds ago Up 35 seconds (healthy) 0.0.0.0:32806->6379/tcp mymagento_redis_1
Комментарии:
1. ПОЧЕМУ вы используете 9001 для Xdebug, когда ссылка, на которую вы ссылались, явно использует 9002 для Xdebug? 9001 я использовал там для некоторых сообщений php-fpm (хотя не уверен, для чего это нужно — возможно, для веб-сервера для связи с php-fpm …)
2. Если вы используете
netstat
или аналогичный toll, который может показать, какие программы прослушивают какие порты .. 9001 будет уже занят, скорее всего, докером (согласноports: - '9001:9001'
части). Неудивительно, что 9001 здесь занят, как для меня … PS, если эта9001:9001
часть предназначена для Xdebug… тогда это просто неправильно / ненужно.3. В таком случае указание 9001 для Xdebug и
ports: - '9001:9001'
одновременное наличие в файле Docker неверно.9001:9001
сообщает: за пределами контейнера (в большинстве случаев хост-ОС) прослушивайте входящие соединения на первом порту (9001) и перенаправляйте их внутри контейнера на второй порт (также 9001). Это означает, что сначала докер должен использовать 9001. И поскольку он уже используется Docker, PhpStorm не может его прослушивать.4. Или просто используйте порт 9002 (или любой другой свободный порт) для связи Xdebug: как в PhpStorm, так и в конфигурации Docker / Xdebug в php.ini (или как вы передаете конфигурацию Xdebug для этого изображения)
5. Конечно, вы можете сделать И ТО, и другое .. но если вы избавитесь от части 9001: 9001… тогда PhpStorm сможет прослушивать порт 9001 для входящих подключений Xdebug, и не будет необходимости менять его на использование 9002 (или любого другого номера).
Ответ №1:
Проблема устранена путем добавления расширения xdebug в конфигурацию контейнера xdebug docker:
fpm_xdebug:
environment:
- 'PHP_EXTENSIONS=bcmath bz2 calendar exif gd gettext intl mysqli pcntl pdo_mysql soap sockets sysvmsg sysvsem sysvshm opcache zip redis xsl blackfire sodium xdebug'
И с помощью порта 9002 в php.ini и в Phpstorm (спасибо @LazyOne).
Ответ №2:
Помимо проблемы с портом, мой компьютер с Linux не может разрешить host.docker.internal
host, поэтому я заменил его IP-адресом 172.17.0.1
(https://github.com/magento/devdocs/issues/7400 ).
Вы можете проверить, какой у вас IP-адрес, используя команду:
$ docker run --rm alpine ip route | awk 'NR==1 {print $3}'
Чтобы избежать потери конфигурации из-за перезаписи docker-composer.yml
и .docker/config.env
файла (когда вы это сделаете в следующий раз ece-docker build:compose command
), я решил добавить новую конфигурацию в новый docker-compose.override.yml
файл:
version: '2.1'
fpm_xdebug:
environment:
- 'PHP_EXTENSIONS=bcmath bz2 calendar exif gd gettext intl mysqli pcntl pdo_mysql soap sockets sysvmsg sysvsem sysvshm opcache zip redis xsl sodium xdebug'
- 'XDEBUG_CONFIG=remote_host=172.17.0.1 remote_port=9002'
Затем установите новое значение для порта прослушивания Xdebug в PhpStorm: 9002
Ответ №3:
- Прежде всего удалите комментарии из этих строк в папке DockerFolder/bin/webserver/Dockerfile.yml
ЗАПУСТИТЕ pecl установите xdebug-2.9.6 ЗАПУСТИТЕ docker-php-ext-включите xdebug
здесь вы можете видеть, что я установил версию 2.9.6, вы делаете то же самое
-
Теперь добавьте эти строки в свой файл Config / php / php.ini
xdebug.remote_host=172.17.0.1 /16
ошибка xdebug.default_enable=1
xdebug.remote_autostart = 1
xdebug.remote_connect_back = 1
xdebug.remote_enable = 1
xdebug.remote_handler=dbgp
xdebug.remote_port= 9000
xdebug.idekey=VSCODE
xdebug.extended_info = 1
Чтобы найти хост, указанный в файле php.ini, измените первую строку xdebug.remote_host=172.17.0.1/16
Выполните следующую команду
ip a
вы найдете
172.17.0.1/16
или
172.27.0.1 / 16
что-то похожее на это. Попробуйте их один за другим.
Файл Php.ini автоматически внесет эти изменения, когда вы это сделаете
sudo docker-compose down -v amp;amp; sudo docker-compse up -d
-
В вашем файле launch.json Vscode добавьте эти конфигурации. Это то же самое, что и конфигурация по умолчанию, но добавлено всего 3 новые строки.
{ «версия»: «0.2.0», «конфигурации»: [ { «имя»: «Прослушивание Xdebug», «тип»: «php», «запрос»: «запуск», «порт»: 9000, «pathMappings»: { «/var/www/html/»: «$ {workspaceFolder}», }, }, { «name»: «Запустить открытый в данный момент скрипт», «type»: «php», «request»: «запуск», «program»: «$ {file}», «cwd»: «${fileDirname}», «порт»: 9000 } ] }
Эти 3 новые строки
"pathMappings": {
"/var/www/html/": "${workspaceFolder}",
},
- Это видео поможет
https://www.youtube.com/watch?v=mahIIF0c8Zo
Я также сохранил docker_image, который автоматически установит xdebug вместе с другой средой magento. Возможно, вам пришлось найти xdebug.remote_host= 172.17.0.1 / 16 , как описано в шаге 2.