wodby / docker4drupal

Docker-based Drupal stack
https://wodby.com/docker4drupal
MIT License
1.24k stars 535 forks source link

Xdebug 3.2.x #557

Open loscar20 opened 1 year ago

loscar20 commented 1 year ago

Codebase Mounted codebase

Describe your issue Since xdebug 3.2.x version I cannot debug, I had to go back to version 5.6.11 which has xdebug 3.1.x version.

Output of docker info

Client: Docker Engine - Community
 Version:    24.0.6
 Context:    default
 Debug Mode: false
 Plugins:
  buildx: Docker Buildx (Docker Inc.)
    Version:  v0.11.2
    Path:     /usr/libexec/docker/cli-plugins/docker-buildx
  compose: Docker Compose (Docker Inc.)
    Version:  v2.21.0
    Path:     /usr/libexec/docker/cli-plugins/docker-compose

Server:
 Containers: 66
  Running: 7
  Paused: 0
  Stopped: 59
 Images: 327
 Server Version: 24.0.6
 Storage Driver: overlay2
  Backing Filesystem: extfs
  Supports d_type: true
  Using metacopy: false
  Native Overlay Diff: true
  userxattr: false
 Logging Driver: json-file
 Cgroup Driver: systemd
 Cgroup Version: 2
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: inactive
 Runtimes: runc io.containerd.runc.v2
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 61f9fd88f79f081d64d6fa3bb1a0dc71ec870523
 runc version: v1.1.9-0-gccaecfc
 init version: de40ad0
 Security Options:
  apparmor
  seccomp
   Profile: builtin
  cgroupns
 Kernel Version: 6.2.0-33-generic
 Operating System: elementary OS 7 Horus
 OSType: linux
 Architecture: x86_64
 CPUs: 4
 Total Memory: 15.49GiB
 Name: HPProBook650G3cd509ddf
 ID: TLAW:3V46:AF2L:R3IW:LYV4:UZKQ:SUAT:ZVZ4:WBRF:2FHS:5EGS:ZWPS
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Live Restore Enabled: false
 Default Address Pools:
   Base: 20.201.0.0/16, Size: 24
   Base: 20.202.0.0/16, Size: 24

Contents of your docker-compose.yml

services:
  mariadb:
    image: wodby/mariadb:$MARIADB_TAG
    container_name: "${PROJECT_NAME}_mariadb"
    stop_grace_period: 30s
    environment:
      MYSQL_ROOT_PASSWORD: $DB_ROOT_PASSWORD
      MYSQL_DATABASE: $DB_NAME
      MYSQL_USER: $DB_USER
      MYSQL_PASSWORD: $DB_PASSWORD
    volumes:
#      - ./mariadb-init:/docker-entrypoint-initdb.d # Place init .sql file(s) here.
      - ./db:/var/lib/mysql

  php:
    image: wodby/drupal-php:$PHP_TAG
    container_name: "${PROJECT_NAME}_php"
    environment:
      SSMTP_MAILHUB: mailhog:1025
#      SSMTP_MAILHUB: opensmtpd:25
      PHP_SENDMAIL_PATH: '"/usr/bin/dos2unix -u | /usr/sbin/ssmtp -t -f"'
#      DB_HOST: $DB_HOST
#      DB_PORT: $DB_PORT
#      DB_USER: $DB_USER
#      DB_PASSWORD: $DB_PASSWORD
#      DB_NAME: $DB_NAME
#      DB_DRIVER: $DB_DRIVER
#      DRUSH_OPTIONS_URI: "http://${PROJECT_BASE_URL}:${PROJECT_PORT}"
#      PHP_FPM_USER: wodby
#      PHP_FPM_GROUP: wodby
#      COLUMNS: 80 # Set 80 columns for docker exec -it.
#      # Read instructions at https://wodby.com/docs/stacks/php/local/#xdebug
#      Uncomment to debug StartDebug
      PHP_XDEBUG: 1
      PHP_XDEBUG_MODE: debug
#      PHP_XDEBUG_MODE: profile
      #PHP_XDEBUG_USE_COMPRESSION: "false"
      #PHP_IDE_CONFIG: serverName=my-ide
      PHP_XDEBUG_IDEKEY: VSCODE
      PHP_XDEBUG_START_WITH_REQUEST: "yes"
#      PHP_XDEBUG_DISCOVER_CLIENT_HOST: 1
#      PHP_XDEBUG_CLIENT_HOST: 172.17.0.1 # Linux
      PHP_XDEBUG_CLIENT_PORT: 9003
      PHP_XDEBUG_CLIENT_HOST: host.docker.internal # Docker 18.03+ Mac/Win
      PHP_XDEBUG_LOG_LEVEL: 0
#      PHP_XDEBUG_CLIENT_HOST: 10.0.75.1 # Windows, Docker < 18.03
#      PHP_XDEBUG_LOG: /tmp/php-xdebug.log
#      # PHPUnit Drupal testing configurations
#      SIMPLETEST_BASE_URL: "http://nginx"
#      SIMPLETEST_DB: "${DB_DRIVER}://${DB_USER}:${DB_PASSWORD}@${DB_HOST}/${DB_NAME}#tests_"
#      MINK_DRIVER_ARGS_WEBDRIVER: '["chrome", {"browserName":"chrome","goog:chromeOptions":{"args":["--disable-gpu","--headless"]}}, "http://chrome:9515"]'
    volumes:
    - ./codebase:/var/www/html
    - ./settings/services.yml:/var/www/html/web/sites/default/services.yml
    - ./settings/settings.local.php:/var/www/html/web/sites/default/settings.local.php
    - ./files:/mnt/files
## Alternative for macOS users: Mutagen https://wodby.com/docs/stacks/drupal/local#docker-for-mac
#    - drupal:/var/www/html
## For XHProf and Xdebug profiler traces
#    - files:/mnt/files

  crond:
    init: true
    image: wodby/drupal-php:$PHP_TAG
    container_name: "${PROJECT_NAME}_crond"
    environment:
      CRONTAB: "*/5 * * * * drush -r /var/www/html/web cron"
    command: sudo -E crond -f -d 0
    volumes:
#     - ./:/var/www/html:cached
    - ./codebase:/var/www/html
    - ./settings/services.yml:/var/www/html/web/sites/default/services.yml
    - ./settings/settings.local.php:/var/www/html/web/sites/default/settings.local.php
    - ./files:/mnt/files
## Alternative for macOS users: Mutagen https://wodby.com/docs/stacks/drupal/local#docker-for-mac
#    - drupal:/var/www/html

#   nginx:
#     image: wodby/nginx:$NGINX_TAG
#     container_name: "${PROJECT_NAME}_nginx"
#     depends_on:
#     - php
#     environment:
#       NGINX_STATIC_OPEN_FILE_CACHE: "off"
#       NGINX_ERROR_LOG_LEVEL: debug
#       NGINX_BACKEND_HOST: php
#       NGINX_SERVER_ROOT: /var/www/html/web
#       NGINX_VHOST_PRESET: $NGINX_VHOST_PRESET
#     #      NGINX_DRUPAL_FILE_PROXY_URL: http://example.com
#     volumes:
#     # - ./:/var/www/html:cached
#     - ./codebase:/var/www/html
# ## Alternative for macOS users: Mutagen https://wodby.com/docs/stacks/drupal/local#docker-for-mac
# #    - drupal:/var/www/html
#     labels:
#     - "traefik.http.routers.${PROJECT_NAME}_nginx.rule=Host(`${PROJECT_BASE_URL}`)"

  # Custom PHP container to execute some commands and prevent die of parent.
  # Information: https://github.com/wodby/docker4drupal/issues/485
  customphp:
    image: wodby/drupal-php:$PHP_TAG
    container_name: "${PROJECT_NAME}_customphp"
    depends_on:
    - php
    command:
    - /bin/bash
    - -c
    - |
      rm -rf /var/www/html/web/sites/default/files
      ln -s /mnt/files/public /var/www/html/web/sites/default/files
      sudo -E chown -R www-data:www-data /mnt/files
    volumes:
#     - ./:/var/www/html:cached
    - ./codebase:/var/www/html
    - ./settings/services.yml:/var/www/html/web/sites/default/services.yml
    - ./settings/settings.local.php:/var/www/html/web/sites/default/settings.local.php
    - ./files:/mnt/files

  mailhog:
    image: mailhog/mailhog
    container_name: "${PROJECT_NAME}_mailhog"
    labels:
    - "traefik.http.services.${PROJECT_NAME}_mailhog.loadbalancer.server.port=8025"
    - "traefik.http.routers.${PROJECT_NAME}_mailhog.rule=Host(`mailhog.${PROJECT_BASE_URL}`)"

#  postgres:
#    image: wodby/postgres:$POSTGRES_TAG
#    container_name: "${PROJECT_NAME}_postgres"
#    stop_grace_period: 30s
#    environment:
#      POSTGRES_PASSWORD: $DB_PASSWORD
#      POSTGRES_DB: $DB_NAME
#      POSTGRES_USER: $DB_USER
#      POSTGRES_DB_EXTENSIONS: pg_trgm
#    volumes:
#    - ./postgres-init:/docker-entrypoint-initdb.d # Place init file(s) here.
#    - /path/to/postgres/data/on/host:/var/lib/postgresql/data # Use bind mount

  apache:
    image: wodby/apache:$APACHE_TAG
    container_name: "${PROJECT_NAME}_apache"
    depends_on:
    - php
    environment:
      APACHE_LOG_LEVEL: debug
      APACHE_BACKEND_HOST: php
      APACHE_VHOST_PRESET: php
      APACHE_DOCUMENT_ROOT: /var/www/html/web
    volumes:
  #     - ./:/var/www/html:cached
    - ./codebase:/var/www/html
    - ./settings/services.yml:/var/www/html/web/sites/default/services.yml
    - ./settings/settings.local.php:/var/www/html/web/sites/default/settings.local.php
    - ./files:/mnt/files
  ## Alternative for macOS users: Mutagen https://wodby.com/docs/stacks/drupal/local#docker-for-mac
  #   - drupal:/var/www/html
    labels:
    - "traefik.http.routers.${PROJECT_NAME}_apache.rule=Host(`${PROJECT_BASE_URL}`)"

#  varnish:
#    image: wodby/varnish:$VARNISH_TAG
#    container_name: "${PROJECT_NAME}_varnish"
#    depends_on:
#    - nginx
#    environment:
#      VARNISH_SECRET: secret
#      VARNISH_BACKEND_HOST: nginx
#      VARNISH_BACKEND_PORT: 80
#      VARNISH_CONFIG_PRESET: drupal
#      VARNISH_ALLOW_UNRESTRICTED_PURGE: 1
#    labels:
#    - "traefik.http.services.${PROJECT_NAME}_varnish.loadbalancer.server.port=6081"
#    - "traefik.http.routers.${PROJECT_NAME}_varnish.rule=Host(`varnish.${PROJECT_BASE_URL}`)"

#  redis:
#    container_name: "${PROJECT_NAME}_redis"
#    image: wodby/redis:$REDIS_TAG

#  adminer:
#    container_name: "${PROJECT_NAME}_adminer"
#    init: true
#    image: wodby/adminer:$ADMINER_TAG
#    environment:
#      # For PostgreSQL:
#      #      ADMINER_DEFAULT_DB_DRIVER: pgsql
#      ADMINER_DEFAULT_DB_HOST: $DB_HOST
#      ADMINER_DEFAULT_DB_NAME: $DB_NAME
#    labels:
#    - "traefik.http.routers.${PROJECT_NAME}_adminer.rule=Host(`adminer.${PROJECT_BASE_URL}`)"

#  pma:
#    image: phpmyadmin/phpmyadmin
#    container_name: "${PROJECT_NAME}_pma"
#    environment:
#      PMA_HOST: $DB_HOST
#      PMA_USER: $DB_USER
#      PMA_PASSWORD: $DB_PASSWORD
#      UPLOAD_LIMIT: 1G
#    labels:
#    - "traefik.http.routers.${PROJECT_NAME}_pma.rule=Host(`pma.${PROJECT_BASE_URL}`)"

#  solr:
#    image: wodby/solr:$SOLR_TAG
#    container_name: "${PROJECT_NAME}_solr"
#    environment:
#      SOLR_DEFAULT_CONFIG_SET: $SOLR_CONFIG_SET
#      SOLR_CLOUD_PASSWORD: $SOLR_PASSWORD
#      ZK_HOST: zookeeper:2181
#      SOLR_HEAP: 1024m
#    depends_on:
#    - zookeeper
#    labels:
#    - "traefik.http.services.${PROJECT_NAME}_solr.loadbalancer.server.port=8983"
#    - "traefik.http.routers.${PROJECT_NAME}_solr.rule=Host(`solr.${PROJECT_BASE_URL}`)"
#    # ports:
#    #   - "8983:8983"

#  zookeeper:
#    image: zookeeper:$ZOOKEEPER_TAG
#    container_name: "${PROJECT_NAME}_zookeeper"
#    environment:
#      ZOO_MY_ID: 1
#      ZOO_SERVERS: server.1=zookeeper:2888:3888;2181
#      ZOO_4LW_COMMANDS_WHITELIST: mntr, conf, ruok

#  drupal-node:
#    image: wodby/drupal-node:$DRUPAL_NODE_TAG
#    container_name: "${PROJECT_NAME}_drupal_nodejs"
#    labels:
#    - "traefik.http.routers.${PROJECT_NAME}_drupal_node.rule=Host(`drupal_node.${PROJECT_BASE_URL}`)"
#    environment:
#      NODE_SERVICE_KEY: node-service-key

#  memcached:
#    container_name: "${PROJECT_NAME}_memcached"
#    image: wodby/memcached:$MEMCACHED_TAG

#  rsyslog:
#    container_name: "${PROJECT_NAME}_rsyslog"
#    image: wodby/rsyslog:$RSYSLOG_TAG

#  athenapdf:
#    image: arachnysdocker/athenapdf-service:$ATHENAPDF_TAG
#    container_name: "${PROJECT_NAME}_athenapdf"
#    environment:
#      WEAVER_AUTH_KEY: weaver-auth-key
#      WEAVER_ATHENA_CMD: "athenapdf -S"
#      WEAVER_MAX_WORKERS: 10
#      WEAVER_MAX_CONVERSION_QUEUE: 50
#      WEAVER_WORKER_TIMEOUT: 90
#      WEAVER_CONVERSION_FALLBACK: "false"

#  node:
#    image: wodby/node:$NODE_TAG
#    container_name: "${PROJECT_NAME}_node"
#    working_dir: /var/www/html/path/to/theme/to/build
#    labels:
#    - "traefik.http.services.${PROJECT_NAME}_node.loadbalancer.server.port=3000"
#    - "traefik.http.routers.${PROJECT_NAME}_node.rule=Host(`node.${PROJECT_BASE_URL}`)"
#    expose:
#    - "3000"
#    volumes:
#    - ./:/var/www/html
#    command: sh -c 'yarn install && yarn run start'

#  webgrind:
#    image: wodby/webgrind:$WEBGRIND_TAG
#    container_name: "${PROJECT_NAME}_webgrind"
#    environment:
#      WEBGRIND_PROFILER_DIR: /mnt/files/xdebug
#    labels:
#    - "traefik.http.routers.${PROJECT_NAME}_webgrind.rule=Host(`webgrind.${PROJECT_BASE_URL}`)"
#    volumes:
#    - files:/mnt/files
#    - ./:/mnt/codebase:cached

  elasticsearch:
    image: wodby/elasticsearch:$ELASTICSEARCH_TAG
    container_name: "${PROJECT_NAME}_elasticsearch"
    environment:
      ES_JAVA_OPTS: "-Xms500m -Xmx500m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
#    ports:
#    - "9200:9200"
#    - "9300:9300"

#  kibana:
#    image: wodby/kibana:$KIBANA_TAG
#    container_name: "${PROJECT_NAME}_kibana"
#    depends_on:
#    - elasticsearch
#    labels:
#    - "traefik.http.services.${PROJECT_NAME}_kibana.loadbalancer.server.port=5601"
#    - "traefik.http.routers.${PROJECT_NAME}_kibana.rule=Host(`kibana.${PROJECT_BASE_URL}`)"

#  opensmtpd:
#    container_name: "${PROJECT_NAME}_opensmtpd"
#    image: wodby/opensmtpd:$OPENSMTPD_TAG

#  xhprof:
#    image: wodby/xhprof:$XHPROF_TAG
#    container_name: "${PROJECT_NAME}_xhprof"
#    restart: always
#    volumes:
#    - files:/mnt/files
#    labels:
#    - "traefik.http.routers.${PROJECT_NAME}_xhprof.rule=Host(`xhprof.${PROJECT_BASE_URL}`)"

#  chrome:
#    image: selenium/standalone-chrome:$SELENIUM_CHROME_TAG
#    container_name: "${PROJECT_NAME}_chrome"
#    volumes:
#    - /dev/shm:/dev/shm
#    entrypoint:
#    - chromedriver
#    - "--no-sandbox"
#    - "--disable-dev-shm-usage"
#    - "--log-path=/tmp/chromedriver.log"
#    - "--verbose"
#    - "--whitelisted-ips="

  traefik:
    image: traefik:v2.0
    container_name: "${PROJECT_NAME}_traefik"
    command: --api.insecure=true --providers.docker
    ports:
    - "${PROJECT_PORT}:80"
#    - '8080:8080' # Dashboard
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

#x-mutagen:
#  sync:
#    defaults:
#      ignore:
#        vcs: true
#        paths:
#        - .DS_Store
#        - .history
#        - .idea
#    drupal:
#      alpha: "."
#      beta: "volume://drupal"
#      configurationBeta:
#        permissions:
#          defaultFileMode: 0644
#          defaultDirectoryMode: 0755
#          defaultOwner: "id:501"
#          defaultGroup: "id:20"

volumes:
  codebase:
  files:
  db:
## For macOS users (Mutagen)
#  drupal:
## For Xdebug profiler
#  files:

Contents of your .env


### Documentation available at https://wodby.com/docs/stacks/drupal/local
### Changelog can be found at https://github.com/wodby/docker4drupal/releases
### Images tags format explained at https://github.com/wodby/docker4drupal#images-tags

### PROJECT SETTINGS

PROJECT_NAME=my_drupal10_project
PROJECT_BASE_URL=drupal.docker.localhost
PROJECT_PORT=8000

DB_NAME=drupal
DB_USER=drupal
DB_PASSWORD=drupal
DB_ROOT_PASSWORD=password
DB_HOST=mariadb
DB_PORT=3306
DB_DRIVER=mysql

### --- MARIADB ----

MARIADB_TAG=10.11-3.26.3
#MARIADB_TAG=11.0-3.26.3
#MARIADB_TAG=10.10-3.26.3
#MARIADB_TAG=10.9-3.26.3
#MARIADB_TAG=10.6-3.26.3
#MARIADB_TAG=10.5-3.26.3
#MARIADB_TAG=10.4-3.26.3

### --- VANILLA DRUPAL ----

DRUPAL_TAG=10-4.58.0
#DRUPAL_TAG=9-4.58.0
#DRUPAL_TAG=7-4.58.0

### --- PHP ----

# Linux (uid 1000 gid 1000)

PHP_TAG=8.2-dev-4.47.0
#PHP_TAG=8.1-dev-4.47.0
#PHP_TAG=8.0-dev-4.47.0

# macOS (uid 501 gid 20)

#PHP_TAG=8.2-dev-macos-4.47.0
#PHP_TAG=8.1-dev-macos-4.47.0
#PHP_TAG=8.0-dev-macos-4.47.0

### --- NGINX ----

NGINX_TAG=1.25-5.33.4
#NGINX_TAG=1.24-5.33.4
#NGINX_TAG=1.25-5.33.4

NGINX_VHOST_PRESET=drupal10
#NGINX_VHOST_PRESET=drupal9
#NGINX_VHOST_PRESET=drupal8
#NGINX_VHOST_PRESET=drupal7

### --- SOLR ---

SOLR_TAG=8-4.18.2
#SOLR_TAG=7-4.18.2
#SOLR_TAG=6-4.18.2
#SOLR_TAG=5-4.18.2

SOLR_CONFIG_SET="search_api_solr_4.1.6"
#SOLR_CONFIG_SET="search_api_solr_4.0.1"
#SOLR_CONFIG_SET="search_api_solr_8.x-3.9"
#SOLR_CONFIG_SET="search_api_solr_8.x-3.2"
#SOLR_CONFIG_SET="search_api_solr_8.x-2.7"
#SOLR_CONFIG_SET="search_api_solr_8.x-1.2"
#SOLR_CONFIG_SET="search_api_solr_7.x-1.14"

### --- ELASTICSEARCH ---

ELASTICSEARCH_TAG=7-5.18.10
#ELASTICSEARCH_TAG=6-5.18.10

### --- KIBANA ---

KIBANA_TAG=7-5.18.10
#KIBANA_TAG=6-5.18.10

### --- REDIS ---

REDIS_TAG=7-4.1.3
#REDIS_TAG=6-4.1.3
#REDIS_TAG=5-4.1.3

### --- NODE ---

NODE_TAG=18-dev-1.24.2
#NODE_TAG=16-dev-1.24.2
#NODE_TAG=14-dev-1.24.2

### --- VARNISH ---

VARNISH_TAG=6.0-4.14.2
#VARNISH_TAG=4.1-4.14.2

### --- POSTGRESQL ----

POSTGRES_TAG=15-1.31.3
#POSTGRES_TAG=14-1.31.3
#POSTGRES_TAG=13-1.31.3
#POSTGRES_TAG=12-1.31.3
#POSTGRES_TAG=11-1.31.3

### OTHERS

ADMINER_TAG=4-3.24.4
APACHE_TAG=2.4-4.12.2
ATHENAPDF_TAG=2.16.0
DRUPAL_NODE_TAG=1.0-2.0.0
MEMCACHED_TAG=1-2.15.3
OPENSMTPD_TAG=6-1.18.2
RSYSLOG_TAG=latest
SELENIUM_CHROME_TAG=3.141
WEBGRIND_TAG=1-1.30.0
XHPROF_TAG=3.7.6
ZOOKEEPER_TAG=3.8```
csandanov commented 1 year ago

Do you have any errors/warnings in xdebug logs in 3.2.x version when it's not working?

loscar20 commented 1 year ago

These errors are repeated in the log file

[102] Log opened at 2023-10-04 08:43:11.201497 [102] [Step Debug] INFO: Checking for client discovery headers: ''. [102] [Step Debug] INFO: Checking header ''. [102] [Step Debug] WARN: Could not discover client host through HTTP headers, connecting to configured a> [102] [Step Debug] WARN: Creating socket for 'host.docker.internal:9003', getaddrinfo: Resource temporar> [102] [Step Debug] ERR: Could not connect to debugging client. Tried: host.docker.internal:9003 (fallbac> [102] [Step Debug] INFO: Checking for client discovery headers: ''. [102] [Step Debug] INFO: Checking header ''. [102] [Step Debug] WARN: Could not discover client host through HTTP headers, connecting to configured a> [102] [Step Debug] WARN: Creating socket for 'host.docker.internal:9003', getaddrinfo: Resource temporar> [102] [Step Debug] ERR: Could not connect to debugging client. Tried: host.docker.internal:9003 (fallbac> [102] Log closed at 2023-10-04 08:43:11.353454

csandanov commented 1 year ago

You're on Linux but have the following line

      PHP_XDEBUG_CLIENT_HOST: host.docker.internal # Docker 18.03+ Mac/Win

you should comment it and uncomment:

#      PHP_XDEBUG_CLIENT_HOST: 172.17.0.1 # Linux
loscar20 commented 10 months ago

Hello,

After some time of investigation, I found that I changed the ip ranges of the docker in the daemon.json file of the same so neither the solution of # PHP_XDEBUG_CLIENT_HOST: 172.17.0.1 # Linux nor the one of PHP_XDEBUG_CLIENT_HOST: host.docker.internal # Docker 18.03+ Mac/Win I have already put there the ip I configured in the daemon.json and I am already managing to debug.

Thank you very much for the help.