1. The problem I’m having:
Using Caddy + caddyl4 in docker, I’m trying to create a fallback route when a specified service is offline, but instead it fails with
"error":"dial unix /sockets/services/service_2.sock: connect: no such file or directory"
instead of forwarding to the next upstream.
2. Error messages and/or full log output:
caddy-1 | {"level":"error","ts":1741023340.9800487,"logger":"layer4","msg":"handling connection","remote":"[::1]:51926","error":"dial unix /sockets/services/service_2.sock: connect: no such file or directory"}
3. Caddy version:
$ docker compose exec caddy caddy version
v2.9.1 h1:OEYiZ7DbCzAWVb6TNEkjRcSCRGHVoZsJinoDR/n9oaY=
4. How I installed and ran Caddy:
docker compose
FROM caddy:2.9-builder AS builder
RUN xcaddy build \
--with github.com/mholt/caddy-l4
FROM caddy:2.9
COPY --from=builder /usr/bin/caddy /usr/bin/caddy
a. System environment:
Debian 12
Docker Compose version v2.33.1
Docker version 28.0.1, build 068a01e
b. Command:
netcat localhost 20000
expected: TCP Service Unavailable (fail overed after trying upstream 0
got: empty / hung session. + error in caddy
c. Service/unit/compose file:
services:
caddy:
build: .
cap_add:
- NET_ADMIN
network_mode: host
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- caddy-data:/data
- caddy-config:/config
- sockets:/sockets
local_fallback:
image: alpine/socat
command: UNIX-LISTEN:/sockets/fallback.sock,fork EXEC:"echo 'TCP Service Unavailable'"
volumes:
- sockets:/sockets
volumes:
caddy-data:
caddy-config:
sockets:
external: true
d. My complete Caddy config:
{
layer4 {
:20000 {
route {
proxy {
lb_policy first
lb_try_duration 1s
upstream unix//sockets/service_2.sock
upstream unix//sockets/fallback.sock
}
}
}
}
}
service1.localhost {
reverse_proxy unix//sockets/service_1.sock {
}
handle_errors {
respond "Service unavailable
" 500
}
}