====== Playwright MCP pro non-headless Chrome na hostitelském počítači ====== ===== Úvodní Kontext ===== Potřeboval jsem, aby AI běžící v Docker kontejneru ovládala můj hostitelský Google Chrome přes Playwright MCP a CDP. Cílem bylo zachovat běžný viditelný Chrome mimo kontejner a přitom ho zpřístupnit kontejneru bez přímého otevření portu do celé sítě. ===== Klíčové Kroky / Konfigurace ===== ==== Jednorázové nastavení firewallu ==== Na hostitelském počítači jsem povolil přístup z Docker bridge sítě na port ''%%9222%%''. Toto pravidlo stačí nastavit jednou: ufw allow in on docker0 proto tcp from 172.17.0.0/16 to any port 9222 ==== Jednorázové nastavení MCP serveru v OpenCode ==== Do konfigurace OpenCode jsem přidal druhý Playwright MCP server, který se nepřipojuje na lokální prohlížeč v kontejneru, ale na hostitelský Chrome přes Docker gateway ''%%172.17.0.1:9222%%'': "playwright-chrome": { "type": "local", "command": [ "npx", "@playwright/mcp@latest", "--cdp-endpoint", "http://172.17.0.1:9222" ], "enabled": true } Po této úpravě musím restartovat OpenCode nebo otevřít novou session, aby se nová MCP konfigurace načetla. ===== Důležitá Nastavení ===== * Chrome poslouchá jen na ''%%127.0.0.1:9222%%''. * ''%%socat%%'' vystaví tento lokální port do Docker bridge sítě jako ''%%172.17.0.1:9222%%''. * Kontejner se připojuje pouze na ''%%http://172.17.0.1:9222%%''. * Přístup z Dockeru funguje jen pro port ''%%9222%%''; další hostitelské porty řeším samostatnými firewall pravidly. ===== Praktické Příklady ===== ==== 1. Spuštění socat na hostitelském počítači ==== Při každém použití nejdřív zpřístupním hostitelský localhost port do Docker bridge sítě: socat TCP-LISTEN:9222,bind=172.17.0.1,reuseaddr,fork TCP:127.0.0.1:9222 ==== 2. Spuštění běžného Chrome s CDP ==== Pak na hostitelském počítači spustím běžný Chrome s remote debuggingem. Nepoužívám headless režim, takže vidím reálné okno prohlížeče: google-chrome --remote-debugging-address=127.0.0.1 --remote-debugging-port=9222 --user-data-dir=/tmp/pw-profile ==== 3. Jak to funguje v praxi ==== Tento setup mi odděluje prohlížeč od Docker kontejneru, ale pořád umožňuje jeho ovládání přes MCP. Chrome zůstává vázaný jen na ''%%127.0.0.1%%'', zatímco ''%%socat%%'' dělá kontrolovaný most do Docker bridge sítě. Díky tomu AI v kontejneru pracuje s hostitelským Chrome, aniž bych musel prohlížeč spouštět uvnitř Dockeru. ===== Závěr / Výstupy ===== Tento postup používám, když chci ovládat hostitelský non-headless Chrome z Docker prostředí přes Playwright MCP. Získal jsem jednoduché a opakovatelné řešení, které kombinuje lokální bezpečnost, viditelný prohlížeč a připojení přes CDP.