如何在Ubuntu 16.04上设置Docker + PhpStorm + xdebug?

8
我的问题是当我开始监听端口时,xdebug无法工作。我认为PhpStorm无法与xdebug链接。我只能得到调试器面板变量不可用的提示。看起来xdebug没有正确的设置。
使用的软件和版本:
Ubuntu 16.04 LTS
Docker v 17.06
docker-compose 1.15

我一直试图设置xdebug+Docker+PhpStorm,但是一直无法做到。我已经阅读了很多教程,但都没有帮助到我。

我的docker-compose.yml文件如下:

version: '3'
services:
    web:
        image: nginx:latest
        ports:
            - "80:80"
        restart: on-failure
        volumes:
            - "./etc/nginx/default.conf:/etc/nginx/conf.d/default.conf"
            - "./etc/ssl:/etc/ssl"
            - "./project:/var/www/html/project"
        depends_on:
            - php
            - db

    php:
        image: nanoninja/php-fpm
        restart: on-failure
        volumes:
            - "./etc/php/php.ini:/usr/local/etc/php/conf.d/php.ini"
            - "./project:/var/www/html/project"
    db:
        image: mysql
        container_name: ${MYSQL_HOST}
        restart: on-failure
        env_file:
            - ".env"
        environment:
            - MYSQL_DATABASE=${MYSQL_DATABASE}
            - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
            - MYSQL_USER=${MYSQL_USER}
            - MYSQL_PASSWORD=${MYSQL_PASSWORD}
        command: mysqld --sql-mode=NO_ENGINE_SUBSTITUTION
        ports:
            - "8988:3306"
        volumes:
            - "./data/db/mysql:/var/lib/mysql"

我的 xdebug.ini 文件如下:
xdebug.default_enable=0
xdebug.remote_enable=1
xdebug.remote_port=9000
xdebug.remote_autostart=0
xdebug.remote_connect_back=0
xdebug.idekey="PHPSTORM"
xdebug.profiler_enable=0
xdebug.remote_host=localhost

PhpStorm设置:

输入图像描述

输入图像描述

输入图像描述

输入图像描述


你能先描述一下你的问题是什么吗? - Hatted Rooster
看看这个是否有帮助 http://tarunlalwani.com/post/debugging-php-xdebug-docker/ - Tarun Lalwani
  1. 收集xdebug日志以获取无法成功调试的会话,并分享它--https://xdebug.org/docs/all_settings#remote_log
  2. 如果您在Docker中运行xdebug,为什么要使用“xdebug.remote_host=localhost”?它必须是PhpStorm运行的计算机的IP地址。
- LazyOne
2个回答

11
在Linux上,使用Docker可以让Xdebug自动连接回主机系统,因此您只需设置xdebug.remote_connect_back=1并在xdebug.ini中省略xdebug.remote_host即可。请注意保留所有HTML标签。

1
这是一个非常有用的解决方案!在我的Mint 20上有效。谢谢! - Dennis D.
1
哥们,你刚刚救了我的命啊!在Ubuntu上试了好几个小时都没弄好,结果你的方法一下子就行了,太感谢了!! - Luan Cardoso

10

我找到了如何运行xdebug的解决方案。

1)首先,我们需要创建一个新的静态路由,该路由将基于您的网络设备。要创建新的静态路由:在终端中运行ifconfig并查找已存在的网络设备。在我的情况下,设备名称将是

wlp4s0

enter image description here

2)继续进行。让我们开始创建静态路由。在终端中运行以下命令:

> sudo ip addr add 10.254.254.254/24 brd + dev wlp4s0 label wlp4s0:1

3) 现在,如果您再次运行 ifconfig 命令,您将看到一个新的静态路由: enter image description here

4) 更新

xdebug.ini

添加文件:

xdebug.remote_host=10.254.254.254

5) 更新 docker.compose.yml 文件: 在 php 部分添加:

environment:
    PHP_IDE_CONFIG: "serverName=project-docker"
    PHP_XDEBUG_ENABLED: 1
    XDEBUG_CONFIG: remote_host=10.254.254.254

6) 最后一件事是更新phpstorm设置。

服务器设置: phpstorm settings 远程调试配置: phpstorm settings 7) 确保xdebug正在运行: xdebug is working


2
实际上是否已安装并运行了DBGp代理?这是一个需要单独安装和配置的独立组件。如果你没有安装它(这在本地单人开发工作中很少使用...并且根本不需要)--那么请删除该部分,以避免混淆/误导其他类似问题的用户。 - LazyOne
是的,你说得对。DBGP代理我没有安装代理。 - Rider_BY

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接