如何用Docker for Windows设置xdebug和PhpStorm(testing版)

我有点困惑,使用Xdebug,Windows的Docker和PhpStorm …

我有一个容器与PHPconfigurationXdebug。 这是什么出现在我的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到9000:

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

Windows防火墙已closures。 尽pipe如此,PHPStorm并没有从这个容器获得任何传入的连接。

所以我试图从不同的地方远程login:
当我从windows telnet 10.0.75.1 9000时,它在PHPStorm正在监听时成功连接,当它没有监听时,返回这个错误:“无法打开连接到端口9000上的主机:连接失败”。 这很有道理。
当我从我的本地networking上的另一台计算机尝试时,同样的事情,telnet 192.168.1.4 9000正常工作。
但是从我的Docker的web容器中,即使我能够ping通10.0.75.1,并在端口80上telnet这个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端口更改为一些随机的其他数字,它不会改变任何东西…

你有什么想法可能会导致这个问题?

我终于搞定了! 关键是将network_mode设置为主机:
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
所以我telneted 192.168.65.1 9000,它的工作!

php.ini:

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

我已经在泊坞窗设置中select了“在本地主机上公开容器端口”(新选项)。
由于指定的network_mode,我无法再使用链接。 所以我打开端口3306,我必须select192.168.65.1作为MySQL主机。 我可能会find一些解决方法,但最后它的工作原理!