Rider_BY
Rider_BY

Reputation: 1129

How to setup Docker + PhpStorm + xdebug on Ubuntu 16.04

My problem is that xdebug doesn't work when I start listening port. I think PhpStorm can't link with xdebug. I just get debugger panel variables are not available. It's looks like xdebug have not correct settings.

Software and versions used:

Ubuntu 16.04 LTS
Docker v 17.06
docker-compose 1.15

So I was trying many times setup xdebug + Docker + PhpStorm but cannot do it. I've read many tutorials but nothing haven't helped me.

My docker-compose.yml looks like this:

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"

My xdebug.ini is:

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 settings:

enter image description here

enter image description here

enter image description here

enter image description here

Upvotes: 8

Views: 11459

Answers (2)

Paweł Napierała
Paweł Napierała

Reputation: 1755

Docker on Linux allows Xdebug to automatically connect back to the host system so you can just set xdebug.remote_connect_back=1 and leave out the xdebug.remote_host in your xdebug.ini.

Upvotes: 11

Rider_BY
Rider_BY

Reputation: 1129

I found out solution how to run xdebug.

1) First of we need create a new static route that will based on your network device. For create new static route: run in terminal ifconfig

and found out the exists network device. In my situation name of device will be as

wlp4s0

enter image description here

2) Go ahead. Let's begin create the static route. In terminal run command like this:

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

3) Now if you run again ifconfig you'll see new static route: enter image description here

4) Update

xdebug.ini

file add:

xdebug.remote_host=10.254.254.254

5) Update docker.compose.yml file: in php section add:

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

6) The last thing is update phpstorm settings.

Server settings: phpstorm settings Remote debug config: phpstorm settings 7) And profit xdebug is working: xdebug is working

Upvotes: 10

Related Questions