Xdebug无法连接回Docker主机

时间:2016-07-04 21:35:47

标签: php docker xdebug boot2docker docker-machine

我刚刚在我的机器上安装了Docker&有一个Nginx / PHP7(FPM)/ MySQL设置工作正常,但在PHP容器上安装了Xdebug我无法连接回主机上的PHPStorm。

这是我的PHP Xdebug配置......

zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-
20151012/xdebug.so
xdebug.remote_log=/usr/local/var/log/xdebug.log
xdebug.remote_enable=1
xdebug.remote_host=192.168.99.1
xdebug.remote_port=9000
xdebug.remote_connect_back=1
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_autostart=true

浏览时,如果为容器设置了Xdebug启用cookie,则不会提示连接。如果我浏览本地托管网站,那么我就知道PHPStorm正确地收听了。

在本地计算机上,我可以telnet到端口9000 ......

$ telnet 192.168.99.1 9000
Trying 192.168.99.1...
Connected to 192.168.99.1.
Escape character is '^]'.
^]
telnet> quit
Connection closed.

...但是我无法从boot2docker VM或容器中获取。当我尝试它只是坐在那里什么都不做。但是,VM和容器都可以正常ping主机。

我试过禁用我的Mac防火墙,但仍然没有快乐。

我不太确定如何在boot2docker VM上禁用防火墙。

任何有关为什么这项工作无效的见解都将受到极大的欢迎。提前谢谢。

2 个答案:

答案 0 :(得分:3)

Xdebug推荐在Container中配置:

zend_extension = xdebug.so
xdebug.remote_enable = 1
xdebug.remote_connect_back = 0
xdebug.remote_host = docker.for.mac.localhost
xdebug.remote_port = 9000
xdebug.remote_handler = dbgp
xdebug.remote_mode = req
xdebug.remote_autostart = 1
xdebug.idekey = PHPSTORM

自Docker-17.06以来,您可以通过静态主机名访问Container内部托管的服务:docker.for.mac.localhost

  

我想从一个集装箱连接到主机上的服务?
  Mac具有更改的IP地址(如果您没有网络访问权限,则为无)。从17.06开始,我们的建议是连接到特殊的Mac-DNS名称docker.for.mac.localhost,它解析为主机使用的内部IP地址。

请参阅https://docs.docker.com/docker-for-mac/networking/#i-cannot-ping-my-containers

答案 1 :(得分:0)

您需要使用从Docker主机桥接到Mac的网络。在Mac上执行ifconfig并在其他本地网络上查找本地IP,例如10.0.1.13。 (详细信息可能因Docker的版本而有所不同,但这适用于Vagrant作为Docker主机,并且适用于大多数VM。)