微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

连接到远程 Docker 镜像上的 XDEBUG

如何解决连接到远程 Docker 镜像上的 XDEBUG

我正在尝试使用 NetBeans 11 作为我的客户端进行调试,Docker 映像上的 Xdebug 3。 Docker 容器位于远程主机上。我无法建立连接。 NetBeans 屏幕底部的指示器将永远滚动并显示“等待连接 (netbeans-xdebug)”。我不确定我做错了什么。我过去在没有 Docker 和 Xdebug 2 的情况下做过这项工作,我不确定我是否搞砸了 Xdebug 3、Docker 或两者。

我的配置:

Dockerfile 正确添加了 Xdebug,我可以在我的容器中看到它。

docker-compose.yml

---

services:
  drupal:
    container_name: intranet-finkenb2
    ports:
      - "8082:80"
      - "9092:9003"
    volumes:
      - /home/finkenb2/intranet/custom_themes:/opt/drupal/web/themes/custom
      - /home/finkenb2/intranet/custom_modules:/opt/drupal/web/modules/custom
    environment:
      XDEBUG_MODE: debug,develop
      XDEBUG_SESSION: netbeans-xdebug
      XDEBUG_CONfig: >
        client_host = localhost
        client_port = 9003
        discover_client_host=true
        start_with_request=yes
  db:
    container_name: intranet-finkenb2-db
  solr:
    container_name: intranet-finkenb2-solr
    ports:
      - "8982:8983"

volumes:
  public_files:
  private_files:
  site_settings:

通过 PuTTY 的 SSH 隧道:R9092 localhost:9092

NetBeans PHP 调试配置:

 - Debugger Port: 9092
 - Session ID: netbeans-xdebug
 - Maximum Data Length: 8192
 - Check: Stop at first line

NetBeans 项目配置(运行配置):

 - Run As: Remote Web Site
 - Project URL: http://intranet-finkenb2.devel.lib.msu.edu
 - index file: index.PHP
 - remote connection
   - hostname intranet8.devel.lib.msu.edu /*docker host server*/
   - user/pwd correct
   - initial directory /var/www/

解决方法

这是不正确的:

ports
- "9092:9003"

Xdebug 将连接到您的 IDE,因此您无需公开端口。这些端口无论如何都是用于外部暴露的,而且您已经使用 -R SSH 连接到容器中,所以这是没有意义的。

这是不正确的:

  XDEBUG_CONFIG: >
    client_host = localhost
    client_port = 9003
    discover_client_host=true
    start_with_request=yes
  1. 例如,您不能将所有这些都用作 XDEBUG_CONFIG variablestart_with_request 的一部分。
  2. discover_client_host 与 Docker 不起作用,因为它通过网关获取了错误的 IP
  3. localhost 通常也不正确,因为它需要是 IDE 侦听的机器的 IP/主机名。但是您正在通过 SSH 连接到该容器,所以应该没问题。
  4. 使用该 SSH 隧道,您需要将 client_port 设置为远程 SSH 端点 (9092) 的端口。

如果还有什么不清楚的,制作一个日志文件,或者尝试调试一个包含 xdebug_info() 的页面,它会告诉你 Xdebug 尝试了什么。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?