LINUX.ORG.RU

Не работает xdebug в Docker

 


0

1

Всем добрый день.

Пытаюсь наладить работу xdebug внутри Docker-контейнера, но, видимо что-то делаю не так, подскажите пожалуйста, в чём может быть причина:

Есть Laravel-проект, я только начал его изучать.

Вот структура папок и файлов:

laravel-docker
    dockerfiles
        composer.Dockerfile
        php.Dockerfile
    env
        mysql.env
    nginx
        nginx.conf
    php
        xdebug.ini
    src
        <тут лежат файлы Laravel>

Структура служебных файлов:

composer.Dockerfile:

FROM composer:latest
WORKDIR /var/www/laravel
ENTRYPOINT ["composer", "--ignore-platform-reqs"]

php.Dockerfile:

FROM php:8.3-fpm-alpine
WORKDIR /var/www/laravel
RUN docker-php-ext-install pdo pdo_mysql
RUN apk add --no-cache \
    autoconf \
    g++ \
    make
 
RUN apk add --update linux-headers
 
RUN pecl install xdebug && docker-php-ext-enable xdebug

mysql.env:

MYSQL_DATABASE=laravel_db
MYSQL_USER = laravel
MYSQL_PASSWORD = password
MYSQL_ROOT_PASSWORD = password

nginx.conf:

server{
    listen 80;
    index index.php index.html;
    server_name localhost;
    root /var/www/laravel/public;
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
}

xdebug.ini:

[xdebug]
 
 
zend_extension=xdebug.so
xdebug.mode=debug
xdebug.start_with_request=yes
xdebug.client_host=host.docker.internal
xdebug.client_port=9003
xdebug.log = /var/www/laravel/logs/xdebug.log
xdebug.idekey=PHPSTORM
xdebug.discover_client_host=1

В настройках PHPStorm в секции PHP->Servers выставлены настройки:

Host:  http://localhost
Port: 8000
Debugger: Xdebug

Маппинг:

C:/Projects/laravel-docker   /var/www/laravel

В секции PHP-> Debug выставлено:

Debug Port: 9003,9000,9099
галочки все выставлены

Значок телефонной трубки включен.

Ставлю точку останова в файле src/public/index.php - это точка входа в приложение, обновляю страницу в браузере, но скрипт не останавливается на этой точке останова.

Вот логи самого xdebug внутри контейнера:

[8] Log opened at 2026-03-23 08:34:17.065545
[8] [Config] INFO: Control socket set up successfully: '@xdebug-ctrl.8'
[8] [Step Debug] INFO: Checking for client discovery headers: 'HTTP_X_FORWARDED_FOR,REMOTE_ADDR'.
[8] [Step Debug] INFO: Checking header 'HTTP_X_FORWARDED_FOR'.
[8] [Step Debug] INFO: Checking header 'REMOTE_ADDR'.
[8] [Step Debug] INFO: Client host discovered through HTTP header, connecting to 172.19.0.1:9003.
[8] [Step Debug] WARN: Creating socket for '172.19.0.1:9003', poll success, but error: Operation in progress (29).
[8] [Step Debug] WARN: Could not connect to client host discovered through HTTP headers, connecting to configured address/port: host.docker.internal:9003.
[8] [Step Debug] INFO: Connected to debugging client: 172.19.0.1:9003 (from REMOTE_ADDR HTTP header), host.docker.internal:9003 (fallback through xdebug.client_host/xdebug.client_port).

Я понимаю, что что-то где то я настроил не так, но вот что? Помогите пожалуйста.

Сам проект корректно открывается по адресу http://localhost:8000/

Содержимое docker-compose.yaml:

version: "3.8"
services:
    nginx:
        image: "nginx:stable-alpine"
        ports:
            - "8000:80"
        volumes:
            - ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf:ro
            - ./src:/var/www/laravel
    php:
        build:
            context: dockerfiles
            dockerfile: php.Dockerfile
        volumes:
            - ./src:/var/www/laravel
            - ./php/xdebug.ini:/usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
        environment:
            PHP_IDE_CONFIG: "serverName=localhost:8000"
    mysql:
        image: mysql:8.0
        ports:
            - "3316:3306"
        env_file:
            - env/mysql.env
    phpmyadmin:
        image: phpmyadmin/phpmyadmin:latest
        ports:
            - "8080:80"
        environment:
            PMA_HOST: mysql
            MYSQL_ROOT_PASSWORD: password
    composer:
        build:
            context: dockerfiles
            dockerfile: composer.Dockerfile
        volumes:
            - ./src:/var/www/laravel
    artisan:
        build:
            context: dockerfiles
            dockerfile: php.Dockerfile
        volumes:
            - ./src:/var/www/laravel
        entrypoint: ["php", "/var/www/laravel/artisan"]



Последнее исправление: fenix_63 (всего исправлений: 1)
Ответ на: комментарий от kostik87

Где проброс порта 9003 на HOST систему?

А зачем его пробрасывать? 9003 порт вообще открывает PhpStorm, а xdebug уже к нему присоединяется. И судя по логам с соединением проблем нет.

aiive
()