Reputation: 2947
I've tried many things trying to let work Xdebug in a Docker container. I came in contact with these resources:
I think the problem is either something with the ports that I don't understand, or it is something with the debugger session not being started or recognized. For the debugger session I have also tried to install a browser extension that sets a cookie.
I ended up at least to have separate containers, one as dev container with enabled Xdebug.
docker-compose.yml
version: "3"
services:
production:
build: .
ports:
- "8000:80"
volumes:
- .:/var/www/html
development:
build: .
ports:
- "8080:80"
# - "10000:80" also not working
volumes:
- .:/var/www/html
- ./dev.php.ini:/usr/local/etc/php/php.ini
Dockerfile
FROM php:7.4.0-apache
RUN pecl install xdebug \
&& docker-php-ext-enable xdebug
dev.php.ini
xdebug.remote_enable=on
xdebug.remote_host=host.docker.internal
xdebug.remote_port=10000
xdebug.idekey=PHPSTORM
localhost:8080 phpinfo data
PhpStorm config
Any ideas?
Upvotes: 7
Views: 14247
Reputation: 2947
After booting up my machine to investigate further with the comments of @abestrad and @LazyOne, without changing anything, opening localhost:8080 suddenly let the debugging work by stopping at the breakpoint that I have set. Actually I had already tried to restart the Docker Desktop App before writing the question, maybe at that point my configurations were at a wrong state.
But at the end the solution was: Restarting the PC.
Watch out
To be sure i tried to open it also in a private browser session and it wasn't working anymore. That was because the special cookie still was set in the normal browser store (cookie that was stored either from the Browser extension that I have already uninstalled, or from trying out the JetBrains Bookmarklets generator before writing the question).
The solution to let it work everytime was to add following:
xdebug.remote_autostart=1
Citate from here:
Normally you need to use a specific HTTP GET/POST variable to start remote debugging (see Step Debugging). When this setting is set to 1, Xdebug will always attempt to start a remote debugging session and try to connect to a client, even if the GET/POST/COOKIE variable was not present.
Upvotes: 4