Xdebug в контейнере Docker не может подключиться к PhpStorm в ОС Qubes - PullRequest
0 голосов
/ 31 октября 2019

Xdebug в контейнере Docker не подключается к PhpStorm в моей системе.

Я пытаюсь настроить Xdebug с PhpStorm для среды Docker в Linux (qubes-os / Fedora 30). Xdebug включен, и я могу получить доступ к сообщениям об ошибках. В PhpStorm я всегда обновлял настройки прокси-сервера DBGp соответствующими IP-адресами, которые я дал Xdebug в качестве удаленного хоста. Я перепробовал много версий настроек Xdebug, но все не удалось.

Мое настоящее предположение состоит в том, что что-то с внутренним управлением IP перепутано. Это может быть связано с qubes-os , но я не совсем уверен, так как это нормальная Fedora, и у меня никогда не было подобных проблем раньше ...

My Xdebugconf

zend_extension=xdebug.so

[Xdebug]
xdebug.idekey=PHPSTORM
xdebug.remote_enable=true
xdebug.remote_port=5902
xdebug.remote_host=host.docker.internal
xdebug.remote_log=/tmp/xdebug-remote.log

( Я знаю, что host.docker.internal не работает для Linux. В любом случае я использую его для упрощения отладки, установив IP для этой переменнойв файле /etc/hosts контейнера Docker

My phpinfo ()

xdebug support  enabled
Version 2.6.1
IDE Key PHPSTORM
xdebug.remote_enable    On  On
xdebug.remote_handler   dbgp    dbgp
xdebug.remote_host  host.docker.internal    host.docker.internal
xdebug.remote_log   /tmp/xdebug-remote.log  /tmp/xdebug-remote.log
xdebug.remote_mode  req req
xdebug.remote_port  5902    5902
xdebug.remote_timeout   200 200

My web-log говорит мне, чтомои запросы поступают с 172.18.0.1 - - [31/Oct/2019:09:58:22 +0000] "GET / HTTP/1.1" 200 47698 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36"

my ifconfig output host machine

br-8d5002ad7a3a: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.18.0.1  netmask 255.255.0.0  broadcast 172.18.255.255
        inet6 fe80::42:17ff:feaa:e865  prefixlen 64  scopeid 0x20<link>
        ether 02:42:17:aa:e8:65  txqueuelen 0  (Ethernet)
        RX packets 5  bytes 513 (513.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 11  bytes 866 (866.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        inet6 fe80::42:99ff:fe38:e669  prefixlen 64  scopeid 0x20<link>
        ether 02:42:99:38:e6:69  txqueuelen 0  (Ethernet)
        RX packets 4055  bytes 233615 (228.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 4367  bytes 55073512 (52.5 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.137.0.17  netmask 255.255.255.255  broadcast 10.255.255.255
        inet6 fe80::216:3eff:fe5e:6c00  prefixlen 64  scopeid 0x20<link>
        ether 00:16:3e:5e:6c:00  txqueuelen 1000  (Ethernet)
        RX packets 555370  bytes 785064402 (748.6 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 208464  bytes 13235820 (12.6 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 107  bytes 227427 (222.0 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 107  bytes 227427 (222.0 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

veth0271483: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::183d:fdff:fe2b:f8ce  prefixlen 64  scopeid 0x20<link>
        ether 1a:3d:fd:2b:f8:ce  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 16  bytes 1379 (1.3 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

veth25193ce: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::603c:beff:fe87:6283  prefixlen 64  scopeid 0x20<link>
        ether 62:3c:be:87:62:83  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 16  bytes 1379 (1.3 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

vetha36c6d7: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::789d:60ff:fe15:8eb4  prefixlen 64  scopeid 0x20<link>
        ether 7a:9d:60:15:8e:b4  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 16  bytes 1379 (1.3 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

vethc039300: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::a0a9:4eff:fe3d:8338  prefixlen 64  scopeid 0x20<link>
        ether a2:a9:4e:3d:83:38  txqueuelen 0  (Ethernet)
        RX packets 5  bytes 513 (513.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 11  bytes 866 (866.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

vethe777af4: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::c07e:11ff:fe1a:9f6b  prefixlen 64  scopeid 0x20<link>
        ether c2:7e:11:1a:9f:6b  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 16  bytes 1379 (1.3 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

my ifconfig output на докерконтейнер

eth0      Link encap:Ethernet  HWaddr 02:42:AC:12:00:05  
          inet addr:172.18.0.5  Bcast:172.18.255.255  Mask:255.255.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:14 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:1260 (1.2 KiB)  TX bytes:0 (0.0 B)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

My netstat -ltn с моего хост-компьютера

Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:10137           0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:6942          0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:5902            0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:63342         0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:20080           0.0.0.0:*               LISTEN     
tcp6       0      0 ::1:631                 :::*                    LISTEN     
tcp6       0      0 :::9000                 :::*                    LISTEN     
tcp6       0      0 :::3306                 :::*                    LISTEN     
tcp6       0      0 :::80                   :::*                    LISTEN     
tcp6       0      0 :::81                   :::*                    LISTEN     
tcp6       0      0 :::8082                 :::*                    LISTEN    

My netstat -ltn из док-контейнера

Proto Recv-Q Send-Q Local Address           Foreign Address         State       
tcp        0      0 127.0.0.11:34183        0.0.0.0:*               LISTEN      
tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      
tcp        0      0 0.0.0.0:9001            0.0.0.0:*               LISTEN    

При использовании xdebug.remote_connect_back=1 я получаю

I: Checking remote connect back address.
I: Checking header 'HTTP_X_FORWARDED_FOR'.
I: Checking header 'REMOTE_ADDR'.
I: Remote address found, connecting to 172.18.0.1:5902.
E: Time-out connecting to client (Waited: 200 ms). :-(
Log closed at 2019-10-31 09:32:55

Также, когда я запускаю netstat -nr | grep '^0\.0\.0\.0' | awk '{print $2}' в контейнере докера, я получаю 172.18.0.1

Таким образом, я бы заключил, что xdebug.remote_host = 172.18.0.1

Но когда я использую IP, добавленный Docker к/etc/hosts контейнера (IP-адрес меняется на 172.17-18.0.1-4, сейчас это 172.18.0.4) и просматривают журналы Xdebug, которые я получаю

W: Creating socket for 'host.docker.internal:5902', poll success, but error: Operation in progress (29).
E: Could not connect to client. :-(

Так как эти IP-адреса были несколько неубедительными, япросто пробовал каждый IP-адрес, с которым я столкнулся на своем пути в качестве xdebug.remot_host для контейнера докера. И я либо один из вышеперечисленных журналов сбоев от xdebug

Дополнительно результаты telnet и ping:

telnet 172.18.0.1 5902:
telnet: can't connect to remote host (172.18.0.1): Operation timed out
bash-4.4# telnet 172.18.0.4
telnet: can't connect to remote host (172.18.0.4): Connection refused

bash-4.4# ping 172.18.0.1:
5 packets transmitted, 0 packets received, 100% packet loss

bash-4.4# ping 172.18.0.4
PING 172.18.0.4 (172.18.0.4): 56 data bytes
5 packets transmitted, 5 packets received, 0% packet loss

Вывод : я потерян,Я в основном перепробовал все возможные IP-адреса. Пожалуйста, помогите мне понять, что мне нужно сделать, чтобы отладить мой PHP-код. Спасибо!

1 Ответ

0 голосов
/ 04 ноября 2019

TLDR: укажите в вашем док-контейнере xdebug.remote_connect_back=0 и xdebug.remote_host=172.17.0.1, и он должен работать. Помните: Xdebug должен подключиться с вашего веб-сервера (внутри Docker) к вашей IDE, прослушивающей порт 9000.

Вы не показывали ifconfig в Docker, поэтому я мог ошибочно получить указанный выше IP-адрес. Но важно то, что IP-адрес, который вы указываете в xdebug.remote_host, является тем, который слушает ваша IDE . И этот IP-адрес должен быть доступен из Docker. Вы можете проверить это, запустив «telnet IpAddress 9000» из своего контейнера Docker, чтобы увидеть, получил ли вы правильный IP-адрес своего хоста.

Но некоторые другие моменты:

В вашем докереконтейнер, ваш netstat показывает:

tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      
tcp        0      0 0.0.0.0:9001            0.0.0.0:*               LISTEN 

У вас там работает прокси DBGp? Вам не нужно этого делать. Прокси только усложняет ситуацию в вашей ситуации.

Я вижу в netstat вашего хоста:

tcp6       0      0 :::9000                 :::*                    LISTEN     

Используете ли вы IDE, которая прослушивает только IPv6? Возможно, вы захотите узнать, можете ли вы изменить это для работы с IPv4.

...