1. The problem I’m having:
I cannot build a custom caddy with xcaddy.
2. Error messages and/or full log output:
# docker compose up -d
Compose now can delegate build to bake for better performances
Just set COMPOSE_BAKE=true
[+] Building 52.4s (8/8) FINISHED docker:default
=> [caddy internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 1.01kB 0.0s
=> [caddy internal] load metadata for docker.io/library/caddy:2.9.1 0.7s
=> [caddy internal] load metadata for docker.io/library/caddy:2.9.1-builder 0.7s
=> [caddy internal] load .dockerignore 0.1s
=> => transferring context: 2B 0.0s
=> CACHED [caddy stage-1 1/2] FROM docker.io/library/caddy:2.9.1@sha256:cd261fc62394f1ff0b44f16eb1d202b4e71d5365c9ec866a4f1a9c5a52da9352 0.0s
=> CACHED [caddy builder 1/2] FROM docker.io/library/caddy:2.9.1-builder@sha256:c1e258b449a2deaab94f90330450fcfe8c3e0b6f0891f28a704c749f43825877 0.0s
=> [caddy builder 2/2] RUN xcaddy build --with github.com/caddy-dns/duckdns 46.3s
=> ERROR [caddy stage-1 2/2] COPY --from=builder /user/bin/caddy /usr/bin/caddy 0.0s
------
> [caddy stage-1 2/2] COPY --from=builder /user/bin/caddy /usr/bin/caddy:
------
failed to solve: failed to compute cache key: failed to calculate checksum of ref be9d2008-aa60-4de0-beb1-72bdae774d2a::er8qpikaet44blgv7ng1yo0gi: "/user/bin/caddy": not found
3. Caddy version:
caddy:2.9.1-builder
4. How I installed and ran Caddy:
a. System environment:
# cat /etc/debian_version
12.10
# docker --version
Docker version 28.0.1, build 068a01e
b. Command:
# docker compose up -d
c. Service/unit/compose file:
---
# caddy/compose.yaml
services:
caddy:
build:
context: .
container_name: caddy
pull_policy: build
restart: unless-stopped
user: "3012:3012"
cap_add:
- NET_ADMIN
env_file:
- ./secrets.env
ports:
- "5580:80"
- "5443:443"
- "5443:443/udp"
volumes:
- ./caddy:/etc/caddy
- ./config:/config:rw
- ./data:/data:rw
- ./srv:/srv
- /mnt/logs/caddy/:/logs
d. My complete Caddy config:
Not running yet but I plan to use the following:
{
# auto_https disable_redirects
grace_period 10s
email [REDACT]@gmail.com
acme_dns duckdns {
api_token {env.DUCKDNS_API_TOKEN}
override_domain *.[REDACT]
}
acme_ca https://acme-v02.api.letsencrypt.org/directory
# acme_ca https://acme-staging-v02.api.letsencrypt.org/directory
}
[REDACT].duckdns.org [REDACT].duckdns.org {
tls {
dns duckdns {env.DUCKDNS_API_TOKEN}
}
reverse_proxy http://10.27.0.50:8123
log {
output file /logs/ha.json {
roll_size 10MB
roll_keep 10
roll_keep_for 168h
}
format json
}
}
[REDACT].duckdns.org [REDACT].duckdns.org {
tls {
dns duckdns {env.DUCKDNS_API_TOKEN}
}
reverse_proxy http://10.27.0.65:8123
log {
output file /logs/ha2.json {
roll_size 10MB
roll_keep 10
roll_keep_for 168h
}
format json
}
}
[REDACT].duckdns.org [REDACT].duckdns.org {
tls {
dns duckdns {env.DUCKDNS_API_TOKEN}
}
reverse_proxy http://10.27.0.65:1780
log {
output file /logs/nc.json {
roll_size 10MB
roll_keep 10
roll_keep_for 168h
}
format json
}
}
[REDACT].duckdns.org {
tls {
dns duckdns {env.DUCKDNS_API_TOKEN}
}
reverse_proxy http://10.27.0.50:32400
log {
output file /logs/plex.json {
roll_size 10MB
roll_keep 10
roll_keep_for 168h
}
format json
}
}
[REDACT].duckdns.org {
tls {
dns duckdns {env.DUCKDNS_API_TOKEN}
}
reverse_proxy http://10.27.0.50:6080
log {
output file /logs/v2ray.json {
roll_size 10MB
roll_keep 10
roll_keep_for 168h
}
format json
}
}
5. Links to relevant resources:
Dockerfile:
FROM caddy:2.9.1-builder AS builder
RUN xcaddy build \
--with github.com/caddy-dns/duckdns
FROM caddy:2.9.1
COPY --from=builder /user/bin/caddy /usr/bin/caddy