Guides
Troubleshooting
Practical checks for configuration drift, hostname issues, and runtime validation.
This page summarizes the most important troubleshooting patterns described or implied by the Mullgate usage material.
Start with the CLI
The primary diagnostic surfaces are:
mullgate statusmullgate doctormullgate config exposuremullgate config hostsmullgate config validate --refresh
Common problems
Hostname does not select the expected route
Check for:
- the hostname resolving to the wrong bind IP
- two hostnames resolving to the same bind IP
- a missing local hosts block
- published DNS records that do not match the configured exposure state
What to do:
- run
mullgate config exposure - confirm the route-to-bind-IP mapping
- verify local hosts or DNS resolution
- run
mullgate doctor
Remote clients cannot prove hostname-based routing
Check for:
- shared bind IPs in a multi-route non-loopback setup
- missing or incorrect DNS records
- exposure changes that have not been refreshed into runtime state
What to do:
- assign one explicit bind IP per route
- regenerate or review exposure output
- publish matching DNS A records
- run
mullgate config validate --refreshormullgate start
Saved configuration changed but runtime does not match
Likely cause:
- exposure edits left runtime state marked
unvalidated
What to do:
mullgate config validate --refresh
# or
mullgate startmacOS or Windows behaves differently from Linux
This is expected for the shipped multi-route Docker runtime because Docker Desktop host networking is not equivalent to Linux host networking.
What to do:
- treat config and diagnostic surfaces as supported
- use a Linux host or Linux VM for full runtime proof
start fails before launch
Look for:
- missing Docker Compose support
- invalid exposure edits
- validation failures
- missing HTTPS material when HTTPS is enabled
Use mullgate status and mullgate doctor to identify which layer failed.
Troubleshooting workflow
A reliable sequence is:
- inspect configuration with
mullgate config exposure - inspect hostname guidance with
mullgate config hosts - refresh derived runtime state with
mullgate config validate --refresh - check runtime truth with
mullgate status - investigate routing or hostname drift with
mullgate doctor - verify with a real probe such as
curlthrough the intended proxy entrypoint
Escalation questions
If the issue remains unclear, answer these questions explicitly:
- what exposure mode is configured?
- does every route have a distinct bind IP?
- what does the hostname resolve to from the failing client?
- was the runtime refreshed after the last config edit?
- are you testing on Linux, macOS, or Windows?
- is HTTPS enabled, and if so are both the cert and key present?