Jak na funkční xdebug v dockeru

Neumím si představit práci bez debuggeru. Nikdy jsem rozchozením xdebugu neměl problém, až do té doby, než jsem začal používat Docker. Nějakou dobu jsem používal pro výpis dump() respektive var_dump(), ale bylo to velice otravné. Nakonec jsem věnoval den zkoumání jak xdebug zprovoznit v Dockeru.

Nastavení sítě

Začneme nastavením sítě. Aby xdebug věděl, kam má posílat packety, musíme mu v dockeru nastavit cílovou adresu. Klidně můžeme uvést aktuální IP adresu počítače, má to ale jednu velkou nevýhodu. Pokud používáte DHCP, případně občas pracujete na jiné síti, IP adresu by bylo potřeba v konfiguraci stále měnit. Lepší je přidat síťové kartě extra IP adresu, která se nebude měnit. V konzoli zadejte

Jako zařízení jsem uvedl lo – loopback. Je na každém počítači, nemusíte přemýšlet nad označením síťovky, kterou máte v systému, navíc NetworkManager se nebude snažit nastavení přepisovat.

Příprava systemd service

Nastavení zadáním do konzole nepřežije restart, lepší je vytvořit systemd service. Dříve stačilo příkaz zadat do /etc/rc.local, po nástupu systemd bylo toto řešení označeno jako zastaralé. Naštěstí vytvoření service není nic složitého.

Jako první si vytvoříme script, který nastavení provede.
Do /usr/local/bin/xdebug-ip.bash vložíme:

nastavíme script spustitelný pomocí

Do /etc/systemd/system/xdebug-ip.service vložte:

Systemd unit musíme zapnout a pak nastartovat:

Můžeme ověřit, jestli loopback dostal i druhou adresu pomocí příkazu ip a:

Konfigurace dockeru

V Dockerfile musíme xdebug nainstalovat. Používám pro to tento script:

Nainstaluje se rozšíření a nastaví se. Pokud použijete jinou IP adresu než 10.254.254.254, musíte ji změnit i zde v nastavení xdebugu.

Do docker-compose.yml:

Nastavení na straně dockeru a sítě je hotovo. Existující kontejner je třeba znovu sestavit aby se nainstalovat xdebug a provedlo jeho nastavení. To lze provést příkazem:

Nastavení PHPStorm

V menu File -> Settings -> Languages & Frameworks -> Debug -> DBGp Proxy

Dále pak v File -> Settings -> Languages & Frameworks -> Servers přidat server a nastavit podle obrázku (pozor na port, musí být také 9000):

Důležité je mít zvoleno Use path mappings a správně nastavenu cestu. V druhém sloupci na obrázku je /var/www/html umístění zdrojáků v dockeru.

V Run -> Edit connections červeným tlačítkem + přidat PHP Remote Debug, nastavit podle obrázku:

V Run je potřeba vybrat Start listening for PHP debug connections. Menu Run -> Break at first line in PHP scripts musí být odškrknuto. Jinak by se provádění zastavilo vždy na prvním řádku a ne až na místě breakpointu.

Teď stačí nastavit breakpoint, udělat refresh v prohlížeči, přijmout v PHP Stormu connection od xdebugu:

a tradá:

Bez funkčního xdebugu si neumím ladění představit. Jsem moc rád, že se mi vše povedlo nastavit a mohu pohodlně ladit i aplikaci spuštěnou v dockeru.

Když to nefunguje

  • zkontrolujte, jestli spojení na xdebug nezahazuje firewall

Další typy budu doplňovat podle ohlasů.

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *