如何使用 docker 设置 xdebug 和 PhpStorm for Windows(测试版)

How to setup xdebug and PhpStorm with docker for Windows (beta)

我对使用 Xdebug、Docker 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).它也是 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 正在监听时成功连接,而 returns 当它不监听时出现此错误:"Could not open connection to the host on port 9000 : connect failed"。这很有道理。
当我从本地网络上的另一台计算机尝试时,也是一样,telnet 192.168.1.4 9000 工作正常。
但是从我的 Docker 的网络容器中,即使我可以成功地 ping 10.0.75.1 并在端口 80 上远程登录这个 IP(它连接),在端口 9000 上它 returns 一个错误是否 PHP风暴是否在听:

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 端口更改为其他一些随机数字,但没有任何改变...

你知道是什么导致了这个问题吗?

我终于让它工作了!关键是将 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 设置中选择了 "Expose container ports on localhost"(新选项)。
由于指定的 network_mode,我不能再使用链接了。所以我打开了端口 3306,我必须选择 192.168.65.1 作为 mysql 主机。我可能会找到一些解决方法,但最终它起作用了!

您可以使用 docker 定义的标准主机名来代替 IP 地址:

xdebug.remote_host=host.docker.internal

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