name: webmcp-local-lab services: web: build: context: . dockerfile: Dockerfile.web environment: HOST: 0.0.0.0 PORT: 4173 ports: - "127.0.0.1:${WEB_PORT:-4173}:4173" networks: - webmcp lan-share: image: nginx:1.29-alpine ports: - "${LAN_BIND_IP:-0.0.0.0}:${LAN_SHARE_PORT:-8484}:80" volumes: - ./public/shots:/usr/share/nginx/html:ro healthcheck: test: ["CMD-SHELL", "wget --quiet --spider http://127.0.0.1/"] interval: 5s timeout: 3s start_period: 5s retries: 10 networks: - webmcp browser: build: context: ./docker/chrome dockerfile: Dockerfile environment: WEBMCP_TARGET_URL: ${WEBMCP_TARGET_URL:-http://web:4173/} depends_on: web: condition: service_healthy ports: - "127.0.0.1:${BROWSER_DEBUG_PORT:-9222}:9223" shm_size: 2gb healthcheck: test: ["CMD-SHELL", "curl --silent --fail http://127.0.0.1:9223/json/version >/dev/null"] interval: 5s timeout: 3s start_period: 10s retries: 20 networks: - webmcp browser-mcp: build: context: ./docker/browser-mcp dockerfile: Dockerfile depends_on: browser: condition: service_healthy ports: - "127.0.0.1:${WEBMCP_MCP_PORT:-18787}:8787" healthcheck: test: ["CMD-SHELL", "node -e \"fetch('http://127.0.0.1:8787/healthz').then((r) => process.exit(r.ok ? 0 : 1)).catch(() => process.exit(1))\""] interval: 5s timeout: 3s start_period: 15s retries: 20 networks: - webmcp networks: webmcp: driver: bridge