Meet DockRouterYour containers. A hostname. A clear path to HTTPS.InstallationRun a Docker container or build one native Go binary.Labels & discoveryKeep routing close to the application it belongs to.Automatic TLSA secure first connection, with a little less certificate administration.Load balancingChoose the right path through your replicas.Security at the edgeExplicit access decisions. Private administration. Trusted proxy boundaries.Dashboard & metricsFollow routes, certificates and requests from the same router.Inside the routerOne process, from incoming connection to container backend.Configuration referenceGlobal environment variables and service-level middleware labels.
Documentation, without the detour.ESC to close
Browse documentation
DOCUMENTATION / ROUTING

Load balancing

Choose the right path through your replicas.

Four ways to share the load

Choose a strategy per route with dr.loadbalancer. The default is roundrobin.

ValueBehavior
roundrobinRotate requests through the available pool
weightedPrefer backends according to dr.weight
iphashUse a stable client IP based selection
leastconnPrefer the backend with fewer active connections

Label services, scale replicas

Containers with the same route feed the backend pool. Keep consistent host and path labels across replicas, and make every replica reachable from the router.

terminal
labels:
  dr.enable: "true"
  dr.host: "api.example.com"
  dr.loadbalancer: "leastconn"
  dr.healthcheck.path: "/health"

Let health checks guide selection

Active health checks take failing backends out of rotation and return recovered instances after consecutive successful probes. The last healthy backend is not ejected by this policy. Configure your health endpoint and thresholds explicitly.

terminal
dr.healthcheck.path: "/health"
dr.healthcheck.interval: "10s"
dr.healthcheck.timeout: "5s"
dr.healthcheck.threshold: "3"
dr.healthcheck.recovery: "2"

Plan failure behavior

The dr.retry label sets the retry count, while dr.circuitbreaker configures a failure threshold and window. Consider how retrying affects your application’s non-idempotent operations before enabling retries.

terminal
dr.retry: "2"
dr.circuitbreaker: "5/30s"