如何调试安装到在docker beta for mac上运行的容器的php

jon*_*nie 9 php xdebug docker

我花了半天时间尝试不同的事情,包括我在gist.github.com遇到的这个解决方案

我有一个docker-compose文件,它挂载一个包含我的客户端和服务器项目的文件夹:

 volumes:
    - ~/projectx:/projectx
Run Code Online (Sandbox Code Playgroud)

我的docker php.ini包含以下xdebug选项

[xdebug]
xdebug.remote_enable=1
xdebug.remote_port=9000
xdebug.remote_connect_back=On
xdebug.var_display_max_children = 999
xdebug.var_display_max_data = 999
xdebug.var_display_max_depth = 100
Run Code Online (Sandbox Code Playgroud)

我已在Xdebug的Chrome扩展程序安装

在我的mac主机文件中,我有以下内容,127.0.0.1 localhost dtest.xxx.com因此我可以访问我的网络应用程序(和其他docker web应用程序),通过dtest.xxx.com它们可以运行应用程序

在Phpstorm(版本2016.1.2)在首选项->语言和框架->PHP ->服务器我有:

主机= dtest.xxx.com,端口= 80,调试器= Xdebug的
使用路径映射被选中,我已经
      文件/目录设置为/Users/<myname>/projectx/server
      绝对路径在服务器上设置为/projectx/server

我已经尝试设置xdebug.remote_host从ifconfig获取的我的macs ip以及尝试ip/Users/<myname>/Library/Containers/com.docker.docker/Data/database/com.docker.driver.amd64-linux/slirp/host

但我不能打破一个断点,我甚至加了xdebug_break()双重检查.我也在运行最新的docker betaVersion 1.12.0-rc3-beta18 (build: 9996)

我非常感谢任何人的帮助,这对我来说是一个真正的阻碍.

如果需要任何进一步的信息,我很乐意提供.

jon*_*nie 12

更新2:

正如@Rashidul所指出的那样,自从17.06的Mac版docker,您可以替换xdebug.remote_host="192.168.65.1"xdebug.remote_host="docker.for.mac.localhost"

更新:正确的方式

所以我最终发现我在docker中的xdebug设置应该是

xdebug.enable=1
xdebug.remote_enable = 1
xdebug.idekey="PHPSTORM"
xdebug.remote_port=9000
xdebug.remote_host="192.168.65.1"
xdebug.remote_connect_back=0
Run Code Online (Sandbox Code Playgroud)

在哪里192.168.65.1找到的条目~/Library/Containers/com.docker.docker/Data/database/com.docker.driver.amd64-linux/slirp/host

在最近的更新中,上面不再存在,为了获得Docker主机IP,我知道使用下面的我的 .profile

export DOCKER_HOST_IP=$(ipconfig getifaddr en0)
Run Code Online (Sandbox Code Playgroud)

还要确保在chrome扩展中正确设置idekey,在我的情况下,PHPSTORM
我不再需要ssh隧道

原始方案:

我使用的解决方法是使用命令打开运行php的docker容器的ssh隧道,在我的例子中,我将docker容器ssh端口映射到12,因此 -p 12

ssh -R 9000:localhost:9000 root@dtest.xxx.com -p:12
Run Code Online (Sandbox Code Playgroud)