Uptime Kuma Shows Down but the Container Is Running: How to Diagnose It
Sources and verification
- Source dates
- Oldest source check: 10 September 2026.
- Technical verification
- Separate technical verification has not been recorded.
Publication approval and technical verification are recorded separately. Automated link checks establish reachability, not accuracy. A checked example verifies only its stated test cases, not the whole article or your production setup.
In short
Repeat the failing request from the monitoring container’s network context, using the same scheme, hostname, port and path as the monitor. Compare DNS resolution, connection, TLS and the actual HTTP response. A running container only confirms a process exists. Fix the layer that fails, then stop the demo application deliberately to verify the corrected monitor still detects a real outage.
Key takeaways
- Localhost inside Kuma normally refers to Kuma itself.
- Host-published ports and container ports are different access paths.
- A browser success may depend on cookies, redirects or a different network.
Capture the exact failing request
Write down the monitor type, URL, accepted status codes, redirect behavior, timeout, authentication and latest error. Redact credentials before sharing diagnostics. “Container is running” is a process observation; a healthy HTTP check additionally requires an address that resolves, a reachable listener and an acceptable response.
Before changing anything, compare the host's result with the monitor's result at the same time. A browser can use a different DNS answer, saved session or public proxy route.
Check from the monitoring container
For an example deployment whose Kuma container is named uptime-kuma, this uses its Node runtime to make a bounded request. Replace the example URL and container name. It prints response metadata, not the body or credentials.
docker exec uptime-kuma node -e '
fetch(process.argv[1], {
signal: AbortSignal.timeout(10000), redirect: "manual"
}).then(r => {
console.log("status", r.status);
console.log("redirect", r.headers.get("location"));
if (!r.ok) process.exitCode = 1;
}).catch(e => {
console.error(e.message, e.cause?.code || "");
process.exitCode = 1;
});
' 'http://app:8080/health'
This tests the network context and a basic HTTP request. It does not reproduce every Kuma monitor setting: match authentication, method and redirect policy separately. Node's fetch support is required; if unavailable, use an approved diagnostic tool in that same network context.
Interpret the result
| Observation | Inspect next | Typical correction |
|---|---|---|
| Name does not resolve | Network membership and service name | Use a resolvable name on a shared user-defined network |
| Connection refused | Listener and port | Use the port where the application listens |
| Connection times out | Route and firewall | Permit the intended monitor-to-service path |
| TLS validation error | Hostname, chain and trust store | Correct the certificate or install the appropriate trusted CA |
| Redirect or login response | Path and authentication | Monitor the intended authenticated or public health endpoint |
| HTTP 200 with wrong content | Health endpoint semantics | Assert the expected readiness signal |
Docker's network documentation (opens in a new tab) explains container network isolation and DNS. With a mapping such as 8088:8080, a client using the host's published address connects to port 8088; a peer reaching the container directly uses its listening port 8080. localhost inside Kuma refers to that container unless you deliberately use a networking mode that changes this behavior.
Do not disable certificate validation or accept every HTTP status to turn the dashboard green. If a private CA is intended, configure trust. If authentication is required, give the checker a narrowly scoped account.
Verify the fix both ways
Record the failing observation, make one configuration change and repeat it. Then stop a disposable demo service. Kuma should report the failure and the expected responder should receive it. Restore the service and confirm recovery. A fix that only makes the success case green may have disabled the check's ability to detect failure.
Keep the target URL and network choice in the service runbook, along with a redacted copy of the error. The upstream troubleshooting page (opens in a new tab) is useful for version-specific investigation after locating the failing layer.
Did this help?
Your answer helps us improve this guide. We save only the page and your choice for 30 days.
No name, email, or incident details are requested.
Frequently asked
- Should I use localhost in the monitor URL?
- Only when the service really shares Kuma’s network namespace. For separate containers, use the intended reachable service address and port.
- Does this mean Uptime Kuma is broken?
- Not necessarily. The failure may be in DNS, reachability, TLS, authentication or the service response. Capture the specific error before attributing the cause.
Sources
Vendor facts change. Each source below shows the date this page last checked it.
- Networking overview — Docker. Checked 10 September 2026.
- Uptime Kuma troubleshooting — Uptime Kuma. Checked 10 September 2026.
Related
One practical idea, occasionally
The On-Call Brief: short field notes, templates, and operational lessons.
Follow the field guide
Email subscriptions are not open yet. Read new guides in your feed reader — no email address needed.
Subscribe with RSS