Reputation: 3011
I've read some posts about this but none helped in my case or simply overlooked the missing piece.
I cannot get xdebug to work on PhpStorm using a Docker container.
Docker-compose.yml
version: '2'
services:
web:
image: nginx:latest
volumes:
- .:/usr/share/nginx/html
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
- ./nginx/logs:/var/logs/nginx
- ./nginx/site-enabled/default.conf:/etc/nginx/sites-enabled/default.conf
ports:
- "80:80"
depends_on:
- php
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: 1234
MYSQL_DATABASE: local_db
MYSQL_USER: root
MYSQL_PASSWORD: 1234
ports:
- "3306:3306"
php:
build: images/php
volumes:
- .:/usr/share/nginx/html
- ./config/docker/php/php.ini:/usr/local/etc/php/php.ini
- ./config/docker/php/ext-xdebug.ini:/usr/local/etc/php/conf.d/ext-xdebug.ini
- ./config/docker/php/php-fpm.conf:/usr/local/etc/php-fpm.conf
user: www-data
depends_on:
- db
config/docker/php/ext-xdebug.ini
zend_extension="/usr/lib/php7/xdebug.so"
xdebug.remote_enable=1
xdebug.remote_port=9000
xdebug.overload_var_dump=1
xdebug.default_enable=1
xdebug.remote_autostart=1
xdebug.idekey=PHPSTORM
xdebug.remote_connect_back=1
xdebug.remote_host=172.20.0.1 # ip of host inside docker container
xdebug.remote_log=/usr/share/nginx/html/xdebug.log
error from xdebug.log
Log opened at 2017-05-31 11:01:14
I: Checking remote connect back address.
I: Checking header 'HTTP_X_FORWARDED_FOR'.
I: Checking header 'REMOTE_ADDR'.
I: Remote address found, connecting to 172.20.0.1:9000.
W: Creating socket for '172.20.0.1:9000', poll success, but error: Operation now in progress (29).
E: Could not connect to client. :-(
Log closed at 2017-05-31 11:01:14
In PhpStorm I'm using remote debugger with following settings:
server
Host - 127.0.0.1
Port - 80
Absolute path on server
/usr/share/nginx/html
IDE session key
PHPSTORM
Upvotes: 4
Views: 4954
Reputation: 1058
I've found that the following config on ext-xdebug.ini
works for Docker for Mac
xdebug.remote_connect_back=0
xdebug.remote_host=host.docker.internal
Docker automatically defines host.docker.internal
within containers. So we simply point xdebug to think host.docker.internal
is the IP of host machine (which obviously is). This way, we don't have to rely on ever changing internal IP between docker container and host.
More information can be found here https://docs.docker.com/docker-for-mac/networking/#use-cases-and-workarounds
Upvotes: 3
Reputation: 3011
Ok I got the solution in here
https://forums.docker.com/t/ip-address-for-xdebug/10460/9
I had to set my internal ip to xdebug.remote_host
and disable xdebug.remote_connect_back=0
Seems this is a osx thing. Hope this helps someone here
Upvotes: 3