【问题标题】:How to setup xdebug and PhpStorm with docker for Windows (beta)如何使用 docker for Windows(测试版)设置 xdebug 和 PhpStorm
【发布时间】:2016-09-25 11:49:42
【问题描述】:

我对使用 Xdebug、Docker for Windows 和 PhpStorm 有点困惑...

我在一个带有 PHP 的容器中配置了 Xdebug。这是此容器中我的 php.ini 中出现的内容:

xdebug.remote_enable=on
xdebug.remote_autostart=off
xdebug.idekey=PHPSTORM
xdebug.remote_port=9000
xdebug.remote_host=10.0.75.1
# xdebug.remote_connect_back=1

docker 看到的我的 Windows IP 似乎是 10.0.75.1(从 Windows 访问时,$_SERVER['REMOTE_ADDR'] 的 PHP 显示 10.0.75.1)。也是 DockerNAT 虚拟设备 IP。

PHPStorm(在 Windows 上)正在侦听端口 9000 上的 Xdebug。 我已经为这个容器绑定了 9000 到 9000 端口:

web:
    build: php5
    ports:
        - "80:80"
        - "9000:9000"

Windows 防火墙已关闭。尽管如此,PHPStorm 并没有从这个容器中获得任何传入连接。

因此我尝试从不同的地方远程登录:
当我从 Windows telnet 10.0.75.1 9000 时,它在 PHPStorm 正在侦听时连接成功,并在未侦听时返回此错误:“无法在端口 9000 上打开与主机的连接:连接失败”。这很有意义。
当我从本地网络上的另一台计算机尝试时,同样的事情,telnet 192.168.1.4 9000 工作正常。
但是从我的 Docker 的 web 容器中,即使我可以成功地 ping 10.0.75.1 并在端口 80 上远程登录这个 IP(它连接),在端口 9000 上,无论 PHPStorm 是否正在侦听,它都会返回一个错误:

root@fd60276df273:/var/www/html# telnet 10.0.75.1 9000
Trying 10.0.75.1...
telnet: Unable to connect to remote host: Connection timed out

我尝试将 Xdebug 端口更改为其他随机数字,但它并没有改变任何东西...

您知道导致此问题的原因吗?

【问题讨论】:

  • 您是否看过类似的问题:stackoverflow.com/questions/32668258/… .. 或在 SO 上搜索 [phpstorm] docker xdebug?
  • 是的,但我让它与 docker 机器一起工作。使用 docker for windows (beta) 的设置有所不同,它更本机地运行 - 没有虚拟框。
  • 我明白了。感谢您的澄清。

标签: docker phpstorm xdebug


【解决方案1】:

您可以使用 docker 定义的标准主机名,而不是使用 IP 地址:

xdebug.remote_host=host.docker.internal

这将防止跨平台(mac/win)问题。

【讨论】:

    【解决方案2】:

    我终于让它工作了!关键是将 network_mode 设置为 host :
    https://docs.docker.com/compose/compose-file/

    docker-compose.yml:

    version: '2'
    
    services:
        web:
            build: php5
            ports:
                - "80:80"
            #links:
            #    - db:db
            network_mode: "host"
        db:
            image: mysql
            ports:
                - "3306:3306"
            environment:
                - MYSQL_ROOT_PASSWORD=root
    

    尝试此操作后,我注意到我的容器有一个 IPed 接口 192.168.65.2
    所以我远程登录了 192.168.65.1 9000 并且成功了!

    php.ini:

    xdebug.idekey=PHPSTORM
    xdebug.remote_port=9000
    xdebug.remote_host=192.168.65.1
    

    我在 docker 设置中选择了“在 localhost 上公开容器端口”(新选项)。
    由于指定的network_mode,我不能再使用链接了。所以我打开了 3306 端口,我必须选择 192.168.65.1 作为 mysql 主机。我可能会找到一些解决方法,但最终它可以工作!

    【讨论】:

    • 我想知道这个问题是否在 Windows 的稳定版 Docker 中得到修复。使用桥接网络时,我可以使用 Xdebug。但是,我确实必须在 Windows 防火墙开始工作之前打开 TCP 端口 9000 到来自 10.0.75.0/24 的连接。
    • 是的,我切换到了稳定版,我不再有这个问题,使用默认网络模式。
    猜你喜欢
    • 2014-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-28
    • 2016-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多