Xdebug (inside Docker container) ignoring XDEBUG_CONFIG environment variable

I’m running a PHP application on Docker and I’d like to debug it using XDebug.
In my docker-compose I added the following lines in the phpfpm part:

environment:
      XDEBUG_CONFIG: "remote_enable=1 remote_host=192.168.110.29 remote_port=9000 idekey=PHPSTORM remote_autostart=1"
      PHP_IDE_CONFIG: "serverName=reports.dev"

I configured PHPStorm in the right way, listening on port 9000 and ran the application.

  • Run nano server container on a Raspberry PI 3
  • How to delete an inherit property from yaml config?
  • run r script using docker kaggle image
  • Is it possible to deploy a docker hub publicly hosted image to Kubernetes Container Engine without uploading it to Containers Registery?
  • How to know whether a layer exists locally on docker 1.10+
  • RunContainer: Error response from daemon: Duplicate mount point (Kubernetes)
  • The application works flawlessly but XDebug doesn’t seem to be working.

    If I move the lines of configuration inside the php.ini file the debugger works, except for the fact that Server Name is empty and I cannot debug (that’s why I tried following the docker-compose configuration way).

    If, inside the docker container, I run echo $XDEBUG_CONFIG the output is right, but XDebug seems not to read that Env variable.

  • How to print IP Addresses of all running docker instances?
  • How to use Application Load Balancer for an ECS Service with multiple port mappings?
  • Why is the Node.js AWS-SDK returning the wrong SQS queue URL when creating a local queue
  • Configure Dockerfile to use impdp command when the container is created
  • Scripts in shell script not being executed in docker
  • Importing a python module in Jython StreamSets - ImportError: No module named
  • 2 Solutions collect form web for “Xdebug (inside Docker container) ignoring XDEBUG_CONFIG environment variable”

    I had the same problem. My image was based on nimmis/alpine-apache-php7/. I found that the image was using supervisor to start processes. supervisor has no knowledge of the Docker environment variables.

    The convention to tell supervisor that a process needs to be run, is to create a run script at /etc/sv/{process}/run. A script like this was used to start Apache. I needed to change the script so that it would import Docker environment variables before starting Apache.

    The docs for the base image explain the convention for importing Docker environment:

    If you need environment variables from the docker command line (-e,–env=[]) add

    source /etc/envvars

    before you use them in the script file

    So I created my own custom run script for Apache — I added source /etc/envvars just before execution of httpd.

    I overwrote the original run script, by adding a simple COPY to my Dockerfile:

    COPY apache-run.sh /etc/sv/apache2/run
    

    This successfully ensured that my $XDEBUG_CONFIG was visible to httpd at the time it was launched. I was able to confirm that this affected my PHP configuration, by printing phpinfo(); in a webpage.

    Did you do a phpinfo();? That should tell you the settings used.

    I had the same problem… took me forever to figure out. Are you using xdebug.remote_connect_back=1? If so remove that line.

    My nginx proxy was forwarding an IP through (which was wrong) and so the ip set in XDEBUG_CONFIG was being ignored.

    Docker will be the best open platform for developers and sysadmins to build, ship, and run distributed applications.