PankovAlxndr
@PankovAlxndr
Fullstack web developer

Где проблема при натсройке xdebug на удаленной машине с докером?

Здравствуйте
есть тестовый проект (один файлик index.php)
поднимается в докере на vps (убунту) (удаленный сервер)
вот конфиг компоуза
version: '3.1'

services:
  webserver:
    build:
      context: docker
      dockerfile: nginx/Dockerfile
    working_dir: /application
    volumes:
      - './:/application'
    ports:
      - '180:80'

  php-fpm:
    build:
      context: docker
      dockerfile: php-fpm/Dockerfile
    working_dir: /application
    volumes:
      - './:/application'
    environment:
      PHP_IDE_CONFIG: "serverName=example"
networks:
  default:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 172.18.0.0/16

все поднимается, доступно и php отрабатывает
docker inspect контейнера c php показывает
"Gateway" : "172.18.0.1",
        "IPAddress" : "172.18.0.2",

что и указано в компоуз файле
Итак, теперь стоит задача отладки (на ноуте phpstorm) этого приложения, соответственно в контейнере установлен xdebug (v3) phpinfo его видит
вот его конфиг
xdebug.idekey=PHPSTORM
xdebug.mode=debug
xdebug.client_host=172.18.0.1
xdebug.remote_port=9003

Те имеем сейчас докер контейнер с установленным php и xdebug
достучаться до него через браузер можем, файлы проекта есть на ноутбуке (прокидываются в докер(volume) через rsync)
работаю в phpstorm там настроил нужные вкладки, все работает (валидация проходит)

Ситуация такая
что при запросе из браузер (с установленной кукой XDEBUGа)
сам xdebug инициализирует соединение на 9003 (из своих настроек) это соединение прокидывается на машину где крутится докер (Ubuntu)
мне нужно создать тунель, что все что пришло на 9003 порт Ubuntu транслировалось на мой ноут, на котором слушает его phpStorm (трубочка), но почему-то у меня не выходит...
как я делаю
1) поднимаю докер
2) прокидываю порт ssh -R 9003:localhost:9003 login@addr
3) ставлю точку останова, "поднимаю трубку" в phpstrom
4) обновляю страницу браузера и ничего

сам xdebug пишет это
Creating socket for '172.18.0.1:9003', poll success, but error: Operation in progress (29).
Could not connect to debugging client. Tried: 172.18.0.1:9003 (through xdebug.client_host/xdebug.client_port) :-(


ноутбук
❯ netstat -nat | grep 9003 | grep LISTEN
tcp46      0      0  *.9003                 *.*                    LISTEN


ubuntu
~/projects/simple$ netstat -an | grep 9003
tcp        0      0 127.0.0.1:9003          0.0.0.0:*               LISTEN


Не могу понять, что же я делаю не так
нашел такой вопрос, кажется такая же проблема: https://qna.habr.com/q/392317
но решение, там написанное, для меня не понятно (слабо понимаю в сетяx, devops терминах)
подскажите у меня все то же самое или нет или же я вовсе все делаю не так и как тога нужно?
те задача отлаживать через xdebug приложение, которое находится в контейнере, который крутится на удаленной машине

Без особого понимания что я делаю, но делал так
на ubuntu
ssh -g -L 9003:localhost:9000 -f -N 127.0.0.1
на ноутбуке с phpstorm (настроил 9000 порт для xdebug)
ssh -R 9000:localhost:9000 vps -v
включаю трубочку, точку останова и расширение браузера, обновляю страницу
в терминале при каждом обновлении страницы это
debug1: client_input_channel_open: ctype forwarded-tcpip rchan 2 win 2097152 max 32768
debug1: client_request_forwarded_tcpip: listen localhost port 9000, originator 127.0.0.1 port 59934
debug1: connect_next: host localhost ([127.0.0.1]:9000) in progress, fd=9
debug1: channel 1: new [127.0.0.1]
debug1: confirm forwarded-tcpip
debug1: channel 1: connection failed: Connection refused
setsockopt TCP_NODELAY: Invalid argument
debug1: connect_next: host localhost ([::1]:9000) in progress, fd=10
debug1: channel 1: connection failed: Connection refused
connect_to localhost port 9000: failed.
debug1: channel 1: free: 127.0.0.1, nchannels 2
debug1: client_input_channel_open: ctype forwarded-tcpip rchan 2 win 2097152 max 32768
debug1: client_request_forwarded_tcpip: listen localhost port 9000, originator 127.0.0.1 port 59940
setsockopt TCP_NODELAY: Invalid argument
debug1: connect_next: host localhost ([127.0.0.1]:9000) in progress, fd=9
debug1: channel 1: new [127.0.0.1]
debug1: confirm forwarded-tcpip
debug1: channel 1: connection failed: Connection refused
setsockopt TCP_NODELAY: Invalid argument
debug1: connect_next: host localhost ([::1]:9000) in progress, fd=10
debug1: channel 1: connection failed: Connection refused
connect_to localhost port 9000: failed.
debug1: channel 1: free: 127.0.0.1, nchannels 2
  • Вопрос задан
  • 395 просмотров
Пригласить эксперта
Ответы на вопрос 1
PankovAlxndr
@PankovAlxndr Автор вопроса
Fullstack web developer
смотрел сюда, когда делал
https://onedev.net/post/326

также есть тема с host.docker.internal (у меня docker 20.10+) должно работать, но я не понял как это и что,
изнутри контейнеров не смог найти dns сопоставлений нигде, что и как это должно работать и "доползать" до хост машины с докером - не понял
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы