【问题标题】:How to debug docker container with PhpStorm如何使用 PhpStorm 调试 docker 容器
【发布时间】:2017-10-17 08:31:57
【问题描述】:

无法使用以下配置调试 Web 应用:

Dockerfile:

FROM php:7-fpm

RUN yes | pecl install xdebug \
    && echo "zend_extension=$(find /usr/local/lib/php/extensions/ -name xdebug.so)" > /usr/local/etc/php/conf.d/xdebug.ini \
    && echo "xdebug.remote_enable=on" >> /usr/local/etc/php/conf.d/xdebug.ini \
    && echo "xdebug.remote_autostart=0" >> /usr/local/etc/php/conf.d/xdebug.ini \
    && echo "xdebug.remote_host=site.dev" >> /usr/local/etc/php/conf.d/xdebug.ini \
    && echo "xdebug.remote_log=/var/www/site/xdebug.log" >> /usr/local/etc/php/conf.d/xdebug.ini

WORKDIR /var/www/site

nginx 服务器(site.conf):

server {
    server_name site.dev www.site.dev;
    root /var/www/site/src/UI/Web/Silex/Public;
    ...
}

docker-compose.yml:

version: '2'
services:
    php:
        container_name: acme_php
        build: etc/docker/development/php
        volumes:
            - ./:/var/www/site
    nginx:
        container_name: acme_nginx
        build: etc/docker/development/nginx
        ports:
            - "80:80"
        volumes:
            - ./:/var/www/site
            - ./etc/docker/development/nginx/site.conf:/etc/nginx/conf.d/site.conf
        links:
            - php

运行服务器:

docker-compose up -d --build

服务器:

调试:

运行/调试配置:

按下 bug 按钮会打开 chrome,但不会在断点处停止:

运行 phpinfo() 看起来像(xdebug 区域):

xdebug.log:

I: Connecting to configured address/port: site.dev:9000.
I: Connected to client. :-)
-> <init xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" fileuri="file:///var/www/site/src/UI/Web/Silex/Public/index.php" language="PHP" xdebug:language_version="7.1.5" protocol_version="1.0" appid="6" idekey="18032"><engine version="2.5.4"><![CDATA[Xdebug]]></engine><author><![CDATA[Derick Rethans]]></author><url><![CDATA[http://xdebug.org]]></url><copyright><![CDATA[Copyright (c) 2002-2017 by Derick Rethans]]></copyright></init>

-> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" status="break" reason="ok"><xdebug:message filename="file:///var/www/site/src/UI/Web/Silex/Public/index.php" lineno="5"></xdebug:message></response>

-> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" status="stopping" reason="ok"></response>

为什么它不在断点处停止? :(

【问题讨论】:

  • 1) 收集 xdebug 日志以查看发生了什么(它尝试连接的位置.. 如果有的话) 2) 尝试手动指定客户端计算机(IDE 运行的位置)的 IP 地址(以防万一无法检测到正确的一个)3)在您的代码中尝试使用xdebug_break(); 4)也许它看不到您的“调试此”标记(cookie/查询参数)?试试xdebug.remote_autostart = 1 5) 防火墙?确保 IDE 可以在 xdebug 端口上接收传入请求(它是 xdebug 连接到 IDE 而不是其他方式)
  • BTW -- "PHP | Servers" -- "Host" 字段不应包含任何 http:// 内容 -- 只是一个域名。另外——你应该关闭其他调试选项卡——也许它已经在调试其中一个了..?
  • 1) 不知道 xdebug 日志文件在哪里 2) 我应该在哪里指定这个 IP 3) 没有看到任何输出这样做 4) 完成 5) 我可以监听 PHP 调试连接。主机字段现在修复了“site.dev”。一样,不会停在断点处
  • 没有具体的想法。可能是防火墙。可能是错误的 IP(不太可能,但请仔细检查)。尝试不同的端口(例如 xdebug 和 PhpStorm 设置中的 9001)。顺便说一句——在 Mac IDE 上无法识别谁在 xdebug 端口上侦听(无法判断它是否已经忙)。你可以查看sudo lsof -nP -iTCP -sTCP:LISTEN 的输出,看看谁在监听 xdebug 端口

标签: php docker phpstorm xdebug


【解决方案1】:

使其工作的更改:

Dockerfile:

FROM php:7-fpm

RUN yes | pecl install xdebug \
    && echo "zend_extension=$(find /usr/local/lib/php/extensions/ -name xdebug.so)" > /usr/local/etc/php/conf.d/xdebug.ini \
    && echo "xdebug.remote_enable=on" >> /usr/local/etc/php/conf.d/xdebug.ini \
    && echo "xdebug.remote_autostart=0" >> /usr/local/etc/php/conf.d/xdebug.ini \

WORKDIR /var/www/site

docker-compose.yml:

version: '2'
services:
    php:
        container_name: acme_php
        build: etc/docker/development/php
        volumes:
            - ./:/var/www/site
        links:
            - db
        environment:
          XDEBUG_CONFIG: "remote_host=192.168.1.99"
          PHP_IDE_CONFIG: "serverName=site.dev"
    nginx:
        container_name: acme_nginx
        build: etc/docker/development/nginx
        ports:
            - "80:80"
        volumes:
            - ./:/var/www/site
            - ./etc/docker/development/nginx/site.conf:/etc/nginx/conf.d/site.conf
        links:
            - php

/etc/hosts(主机):

127.0.0.1 site.dev

感谢您的 cmets @LazyOne 提供的所有帮助

【讨论】:

  • 所以 .. 最后它基本上是运行 IDE 的计算机的错误 IP 地址(xdebug.remote_host .. 你现在设置的有点不同)......好吧。很高兴知道。
【解决方案2】:

我遇到了同样的问题,我的配置:

  • Ubuntu 19.10
  • 视觉代码
  • Docker 版本 19.03.5 docker-compose
  • docker-compose 版本 1.25.0

添加这个 Dockerfile: :

echo "xdebug.remote_connect_back=1" >> /usr/local/etc/php/conf.d/xdebug.ini &&

信息:

Xdebug for remote server not connecting

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-30
    • 2016-02-04
    • 2017-11-01
    相关资源
    最近更新 更多