Home

Awesome

Docker Dynamic Upstreams for Caddy.

This package implements a docker dynamic upstreams module for Caddy.

Requires Caddy 2+.

Installation

Download from official website or build yourself using xcaddy.

Here is a Dockerfile example.

FROM caddy:<version>-builder AS builder

RUN xcaddy build \
    --with github.com/invzhi/caddy-docker-upstreams

FROM caddy:<version>

COPY --from=builder /usr/bin/caddy /usr/bin/caddy

Caddyfile Syntax

List all your domain or use On-Demand TLS.

app1.example.com,
app2.example.com,
app3.example.com {
    reverse_proxy {
        dynamic docker
    }
}

Docker Labels

This module requires the Docker Labels to provide the necessary information.

LabelDescription
com.caddyserver.http.enablerequired, should be true
com.caddyserver.http.networkoptional, specify the docker network which caddy connecting through (if it is empty, the first network of container will be specified)
com.caddyserver.http.upstream.portrequired, specify the port

As well as the labels corresponding to the matcher.

LabelMatcher
com.caddyserver.http.matchers.protocolprotocol
com.caddyserver.http.matchers.hosthost
com.caddyserver.http.matchers.methodmethod
com.caddyserver.http.matchers.pathpath
com.caddyserver.http.matchers.queryquery
com.caddyserver.http.matchers.expressionexpression

Here is a docker-compose.yml example with vaultwarden.

vaultwarden:
  image: vaultwarden/server:${VAULTWARDEN_VERSION:-latest}
  restart: unless-stopped
  volumes:
    - ${VAULTWARDEN_ROOT}:/data
  labels:
    com.caddyserver.http.enable: true
    com.caddyserver.http.upstream.port: 80
    com.caddyserver.http.matchers.host: vaultwarden.example.com
  environment:
    DOMAIN: https://vaultwarden.example.com

Docker Client

Environment variables could configure the docker client: