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

标签 php docker xdebug

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

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

 volumes:
    - ~/projectx:/projectx

我的 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

我有 xdebug chrome extension已安装

在我的 mac 主机文件中,我有以下 127.0.0.1 localhost dtest.xxx.com所以我可以通过 dtest.xxx.com 访问我的网络应用程序(和其他 docker 网络应用程序)这一切都可以运行应用程序

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

host = dtest.xxx.com, port=80 , Debugger = Xdebug
勾选使用路径映射,我有
文件/目录设置为 /Users/<myname>/projectx/server
服务器上的绝对路径设置为 /projectx/server

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

但是我不能打断点,我什至添加了xdebug_break()再检查一遍。 我也在运行最新的 docker beta Version 1.12.0-rc3-beta18 (build: 9996)

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

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

最佳答案

更新 2:

正如@Rashidul 所指出的,从 17.06 docker for Mac 开始,您可以将 xdebug.remote_host="192.168.65.1" 替换为 xdebug.remote_host="docker.for.mac。本地主机”

更新:正确的方法

所以我最终发现我在 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

其中 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)

还要确保在 chrome 扩展中正确设置 idekey,在我的例子中是 PHPSTORM
有了这个,我不再需要 ssh 隧道

原解决方案:

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

ssh -R 9000:localhost:9000 root@dtest.xxx.com -p:12

关于php - 如何调试安装到在 docker beta for mac 上运行的容器的 php,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38252963/

相关文章:

php - 从 Docker 容器内部使用 XDebug 进行远程调试不起作用

php - 如何从 MySQL 数据库打印 BLOB 文档

php - Paypal Express Checkout,需要确认吗?

docker - 如何构建一个可以在 busybox 中运行我的 c++ 程序的 docker 构建文件?

docker - 如何在 Kubernetes 内部调用 Redis?删除旧 Redis 服务的问题

debugging - 如何自动改进 Symfony2 中的调试

php - 关于使用定界符将值存储到 MYSQL 数据库的方法的建议

.net - [PHP] : Is it possible to access . 通过 PHP NET DLL?

linux - Docker 卷安装问题

xdebug - xdebug可以美化var_dump吗?