Всем добрый день.
Пытаюсь наладить работу 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"]
