Docker工具箱Xdebug无法与PhpStorm一起使用

时间:2019-10-21 15:30:44

标签: php docker phpstorm xdebug

我尝试了在互联网上找到的所有教程,但仍然无法使用docker toolbox在PhpStorm中使用简单的断点...

我目前在Dockerfile里面有这个东西:

# Install xdebug
RUN pecl install xdebug; \
    docker-php-ext-enable xdebug; \
    echo "error_reporting = E_ALL" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini; \
    echo "display_startup_errors = On" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini; \
    echo "display_errors = On" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini; \
    echo "xdebug.remote_enable=1" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini; \
    echo "xdebug.remote_port=9001" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini; \
    echo "xdebug.remote_connect_back=0" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini; \
    echo "xdebug.remote_host=192.168.99.100" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini; \
    echo "xdebug.idekey=PHPSTORM" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini; \
    echo "xdebug.remote_autostart=1" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini;

Xdebug已正确安装和配置(php -i输出):

xdebug.remote_autostart => On => On
xdebug.remote_connect_back => Off => Off
xdebug.remote_cookie_expire_time => 3600 => 3600
xdebug.remote_enable => On => On
xdebug.remote_handler => dbgp => dbgp
xdebug.remote_host => 192.168.99.100 => 192.168.99.100
xdebug.remote_log => no value => no value
xdebug.remote_mode => req => req
xdebug.remote_port => 9001 => 9001
xdebug.remote_timeout => 200 => 200
xdebug.idekey => PHPSTORM => PHPSTORM

在我的PhpStorm配置中,我具有以下内容:

代理:

DBGp Proxy

调试 Debug

PHP解释器 PHP interpreter

调试配置 Debug config

服务器配置 Server config

模糊的项目是Usernameproject name

我在一个项目中有2个文件夹,一个名为docker,其中包含所有docker文件,另一个site,其中包含所有站点文件。

我的docker-compose的配置如下:

version: '3'

services:
  application:
    image: project_image:latest
    environment:
      - C_UID=${C_UID:-1000}
      - C_GID=${G_UID:-1000}
      - DEVELOPMENT=${DEVELOPMENT:-1}
      - ~/.ssh:/var/www/.ssh
      - ~/.composer:/var/www/.composer
    env_file:
      - .env
    volumes:
      - ${APPLICATION:-../site}:/phpapp
    ports:
      - 9001:9001

  nginx:
    image: dockerwest/nginx-laravel:${NGINXVERSION:-stable}
    environment:
      - VIRTUAL_HOST=${BASEHOST:-project_name.docker},${EXTRAHOSTS}
    volumes:
      - ${APPLICATION:-../site}:/phpapp
    links:
      - application
    ports:
      - 80:80

有人知道我在这里做错了什么吗?

当我尝试断开telnet 192.168.99.100 9001时,无法建立连接,端口9000都无法建立,但是端口80给了我很好的响应。

有人知道这里发生了什么吗?

3 个答案:

答案 0 :(得分:2)

Xdebug需要打开与的连接。您不需要Docker中公开的端口,也不需要Xdebug代理做任何事情。远程登录需要从docker容器到PhpStorm内完成。 Table1.findAll({ include: [{model: Table2, as : 'whatever'}], where : Sequelize.where(Sequelize.literal('json_extract(metadata, \'$.level\')'), {Op.like : '%senior%'}) }) 中的IP地址必须是IDE的IP地址,而不是Docker容器的IP地址(HTTP / Apache在端口80上侦听)。

答案 1 :(得分:1)

必须满足3个条件,xdebug才能与VirtualBox一起远程使用,尤其是在virtualbox内部与Docker连接时。

1) remote_connect_back = 1或主机的确切IP地址(可能经常有所不同)必须在remote_host配置字段中列出(有时有时无法同时使用)在一起,尤其是在docker与virtualbox分开=直接在Windows hyper-v的情况下

2)没有其他应用程序,例如可以在端口9000处公开一个Web项目,该端口必须为php编辑器保留,或者必须由该编辑器/在(或对于php Web项目)侦听该端口,并从/寻址到该端口。 php,这是一个基于项目的配置

3)它类似于第二点,VirtualBox必须没有端口转发到该端口,因为它将有效地占用它,但必须保留给php编辑器,而不是为virtualbox端口转发。并非virtualbox必须在该端口上侦听以转发到某些内部应用程序,但外部php-editor必须侦听它=该端口

答案 2 :(得分:0)

还值得强调的是它是 xdebug.remote_host 还是 xdebug.remote_autostart。 the docsprevious comment 中都提到了这一点。

换句话说 - 如果您觉得您的 remote_host 设置被忽略,请检查 remote_autostart 是否没有意外打开。