====== 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.