Как я могу заставить xdebug работать внутри Docker на удаленном сервере - PullRequest
0 голосов
/ 18 сентября 2018

Итак, я провел около двух дней и не могу заставить xdebug работать в контейнере (docker-compose config) на удаленном сервере

И я всегда получаю E: Time-out connecting to the client. :-(

Машина разработки:

  • Win10 с динамическим IP-адресом
  • Весь код синхронизируется в реальном времени с удаленным сервером (с помощью функции «развертывания»)
  • Настроен PhpStormдля прослушивания на порте 9001: «Прослушивание отладочных подключений PHP» включено.
  • Нет серверов и т. д., только сеанс отладки с нулевой конфигурацией.

Удаленный сервер:

Конфигурация xdebug:

xdebug.remote_enable=1
xdebug.remote_port=9001
xdebug.remote_log="/var/www/xdebug.log"
xdebug.remote_connect_back=1

php-fpm, jwilder / nginx-proxy, letsencrypt-companion, nginx, jeroenpeeters / docker-ssh, работающие через docker-compose.

Вот упрощенная версия docker-compose.yml:

version: "2"

networks:
  default:
    external:
      name: nginx-proxy

services:

  nginx-proxy:
    container_name: nginx-proxy
    image: jwilder/nginx-proxy
    ports:
    - "80:80"
    - "443:443"
    volumes:
    - /var/run/docker.sock:/tmp/docker.sock:ro
    - ./secured/certs_letsencrypt:/etc/nginx/certs:ro
    - /etc/nginx/vhost.d
    - /usr/share/nginx/html
    restart: always

  letsencrypt-companion:
    container_name: letsencrypt-companion
    image: jrcs/letsencrypt-nginx-proxy-companion
    volumes:
    - ./secured/certs_letsencrypt:/etc/nginx/certs:rw
    - /var/run/docker.sock:/var/run/docker.sock:ro
    volumes_from:
    - nginx-proxy
    restart: always

  my_project_nginx:
    container_name: my_project_nginx
    build:
      context: ./containers/nginx_ssl
      args:
        appcontainer: my_project_app
        domain: example.com
    depends_on:
    - nginx-proxy
    links:
    - my_project_app
    - nginx-proxy
    environment:
    - VIRTUAL_HOST=example.com
    - LETSENCRYPT_HOST=example.com
    - LETSENCRYPT_EMAIL=stepan@example.com
    restart: always

  my_project_app:
    container_name: my_project_app
    build:
      context: .
      dockerfile: ./containers/php7_1/Dockerfile
      args:
        idrsafile: ./secured/id_rsa_shared
        php_memory_limit: 6G
    depends_on:
    - nginx-proxy
    restart: always

  my_project_ssh:
    container_name: my_project_ssh
    image: jeroenpeeters/docker-ssh
    depends_on:
    - my_project_app
    volumes:
    - /var/run/docker.sock:/var/run/docker.sock
    - ./secured/authorized_keys:/authorized_keys
    ports:
    - "2227:22"
    environment:
    - FILTERS={"name":["my_project_app"]}
    - AUTH_MECHANISM=publicKey
    - AUTHORIZED_KEYS=/authorized_keys
    restart: always 

Проблема

А есть xdebug log:

... 
I: Checking remote connect back address.
I: Remote address found, connecting to 5.18.238.83:9001.
E: Time-out connecting to the client. :-(

Я перепробовал множество вариантов (указал xdebug.remote_host, установил SSH-туннель через Putty и т. Д.), Но все еще не получил результатов.

1 Ответ

0 голосов
/ 19 сентября 2018

По умолчанию контейнеры Docker находятся в изолированной сети (мост в сетевом режиме) и не имеют доступа к хост-машине по соображениям безопасности.

Если вам нужно подключить хост-машину из контейнера, вам придется снизить уровень изоляции.Вы можете сделать это, изменив сетевой режим на «хост».

В docker compose вы можете сделать это следующим образом:

network_mode: "host" ( doc )

...