> For the complete documentation index, see [llms.txt](/llms.txt)

# Docker Compose

**Time:** \~3 minutes.

<!-- -->

<!-- -->

<!-- -->

<!-- -->

Health check

The `healthcheck` block probes the node's own HTTP API every 30 seconds. The container reports:

* **`starting`** during initial sync. The node answers its API but does not yet have a proven block, so the check holds off. The `start_period` of 10 minutes covers the snapshot download and catch-up before any failure counts. If your node typically takes longer to reach a proven tip, raise `start_period` to match.
* **`healthy`** once the node has a proven tip greater than 0 and the chain time it has synced to is within 5 minutes of now, meaning it is keeping up with network state.
* **`unhealthy`** if the API stops answering, the node falls more than 5 minutes behind the chain, or the proven tip drops back to 0 for three checks in a row.

The status shows in `docker compose ps` and can be scraped by monitoring. The check **reports** health; it does not restart the container on its own. For automatic recovery on `unhealthy`, pair it with a tool such as `autoheal`, or alert on the status from your monitoring stack.

The check requires both a proven L2 tip greater than 0 and a recent synced chain time (within 5 minutes), so it catches a node that synced once and then stalled. Adjust the `300` (seconds) in the probe to change that staleness window.

Admin port stays internal

Port 8880 is the admin port and is intentionally not mapped to the host. Reach it only via `docker exec` on the box itself.
