我对使用Xdebug,适用于Windows的Docker和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访问时,PHP显示$ _SERVER ['REMOTE_ADDR']的10.0.75.1)。它也是DockerNAT虚拟设备IP。

PHPStorm(在Windows上)正在侦听端口9000上的Xdebug。
我已将此容器的端口9000绑定(bind)到9000:
web:
    build: php5
    ports:
        - "80:80"
        - "9000:9000"

Windows防火墙已关闭。尽管如此,PHPStorm仍未从此容器获得任何传入连接。

因此,我尝试从不同的地方进行telnet:
当我从Windows telnet 10.0.75.1 9000时,它在PHPStorm侦听时成功连接,并且在不侦听时返回此错误:“无法打开与端口9000上主机的连接:连接失败”。这是很合理的。
当我从本地网络上的另一台计算机尝试时,telnet 192.168.1.4 9000也可以正常工作。
但是即使我可以成功ping 10.0.75.1并通过telnet在端口80上连接此IP(它连接),也可以从Docker的Web容器中进行连接,但在端口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端口更改为其他一些随机数,并且它没有任何改变...

您知道什么可能导致此问题吗?

最佳答案

我终于有了工作!关键是将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

尝试此操作后,我注意到我的容器的接口(interface)IP为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主机。我可能会找到一些解决方法,但最终它可以工作!

关于docker - 如何使用docker for Windows(beta)设置xdebug和PhpStorm,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37478387/

10-12 12:52