【问题标题】:Magento Cloud Docker + Xdebug + PhpStorm = Port 9001 busyMagento Cloud Docker + Xdebug + PhpStorm = 9001 端口繁忙
【发布时间】:2020-09-30 15:52:19
【问题描述】:

我有一个 Docker 环境正在运行。

为了让 Xdebug 运行,我按照此页面中的步骤操作: https://devdocs.magento.com/cloud/docker/docker-development-debug.html

当我尝试打开“开始侦听 PHP 调试连接”时,出现错误:

无法开始侦听来自“xdebug”的连接:端口 9001 正忙

有人知道如何使用 Xdebug 在 docker 中正确设置 Magento 吗?

编辑: 整个环境是这样的:

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

【问题讨论】:

  • 当您引用的链接明确使用 9002 进行 Xdebug 时,为什么还要使用 9001 进行 Xdebug? 9001 我在那里使用了一些 php-fpm 通信(虽然不确定需要什么——也许是为了让 Web 服务器与 php-fpm 通信......)
  • 如果您使用netstat 或类似的收费,可以显示哪些程序正在侦听哪些端口.. 9001 将已经被占用,很可能被 Docker 占用(根据ports: - '9001:9001' 部分)。对我来说,9001 在这里很忙也就不足为奇了......如果 9001:9001 部分是针对 Xdebug 的......那么它就是错误/不必要的。
  • 在这种情况下,为 Xdebug 指定 9001 并同时在 Docker 文件中包含 ports: - '9001:9001' 是错误的。 9001:9001 告诉:在容器外部(大多数情况下是主机操作系统),在第一个端口 (9001) 上侦听传入连接,并将它们在容器内转发到第二个端口(也是 9001)。这意味着 Docker 必须使用第一个 9001。而且因为它已经被 Docker 使用了,所以 PhpStorm 无法在那里监听。
  • 或者只使用 9002 端口(或任何其他空闲端口)进行 Xdebug 通信:在 php.ini 中的 PhpStorm 和 Docker/Xdebug 配置上(或者你如何为这个图像传递 Xdebug 配置)
  • 当然,你可以同时做 .. 但是如果你去掉 9001:9001 部分... 那么 PhpStorm 将能够在 9001 端口上监听传入的 Xdebug 连接,并且不需要将其更改为使用 9002(或任何其他数字)。

标签: docker phpstorm magento2 xdebug


【解决方案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'

在 php.ini 和 Phpstorm 中使用端口 9002(感谢 @LazyOne)。

【讨论】:

    【解决方案2】:

    除了端口问题,我的Linux机器无法解析host.docker.internal主机,所以我将其替换为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'
    

    然后,在 PhpStorm 设置一个新的 Xdebug 监听端口值:9002

    【讨论】:

      【解决方案3】:
      1. 首先从这些行中删除 cmets DockerFolder/bin/webserver/Dockerfile.yml

      运行 pecl 安装 xdebug-2.9.6 运行 docker-php-ext-enable 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 && sudo docker-compse up -d
      
      1. 在你的 Vscode launch.json 文件中添加这些配置。这些与默认配置相同,但仅添加了 3 行。

        { “版本”:“0.2.0”, “配置”:[ { "name": "监听 Xdebug", “类型”:“php”, “请求”:“启动”, “端口”:9000, “路径映射”:{ "/var/www/html/": "${workspaceFolder}", }, }, { "name": "启动当前打开的脚本", “类型”:“php”, “请求”:“启动”, "程序": "${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 中所述。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-06-17
        • 1970-01-01
        • 2013-02-08
        • 2016-01-07
        • 2013-12-30
        • 2012-09-06
        • 2019-04-14
        • 1970-01-01
        相关资源
        最近更新 更多