Magento Cloud Docker Xdebug PhpStorm = Порт 9001 занят

#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:

  1. Прежде всего удалите комментарии из этих строк в папке DockerFolder/bin/webserver/Dockerfile.yml

ЗАПУСТИТЕ pecl установите xdebug-2.9.6 ЗАПУСТИТЕ docker-php-ext-включите xdebug

здесь вы можете видеть, что я установил версию 2.9.6, вы делаете то же самое

  1. Теперь добавьте эти строки в свой файл 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
  
  1. В вашем файле 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}",
                },
  
  1. Это видео поможет
    https://www.youtube.com/watch?v=mahIIF0c8Zo

Я также сохранил docker_image, который автоматически установит xdebug вместе с другой средой magento. Возможно, вам пришлось найти xdebug.remote_host= 172.17.0.1 / 16 , как описано в шаге 2.