caddy-docker-proxy
caddy-docker-proxy copied to clipboard
Fix broken block parsing when label prefix contains dots
When CADDY_DOCKER_LABEL_PREFIX contains dots, parsing of blocks will break.
e.g. With CADDY_DOCKER_LABEL_PREFIX=mydomain.gitlab.caddy, cdp will yield error:
[ERROR] Removing invalid block: Caddyfile:2: unrecognized global option: gitlab\n{\n\tgitlab {\n\t\tcaddy http://redis.gitlab.mydomain {\n\t\t\treverse_proxy 127.0.0.1:5540\n\t\t}\n\t}\n}\n\n
Then wrongly parsed block is:
{
gitlab {
caddy http://redis.gitlab.mydomain {
reverse_proxy 127.0.0.1:5540
}
}
}
It is because gitlab.caddy in mydomain.gitlab.caddy also gets parsed as path.
Using dots in prefix conforms to what docker has adopted in their labels, e.g.:
"com.docker.compose.project": "...",
"com.docker.compose.project.config_files": "...",
"com.docker.compose.project.working_dir": "...",
So using dot-separated string in CADDY_DOCKER_LABEL_PREFIX should be a good way to keep naming style consistent with other labels and should be supported.
This PR fixes it by canonicalizing the label prefix to "caddy", so meta characters in user provided label prefix will not affect cdp's block parsing.
@lucaslorentz @francislavoie Ping for a review, I've used it for months and it proves to work usefully.
Use cases:
services:
cs2-ingress:
image: .../caddy:latest # with caddy-docker-proxy built
environment:
CADDY_DOCKER_LABEL_PREFIX: game.cs2.caddy
labels:
game.cs2.caddy: http://
game.cs2.caddy.handle_path: /fastdl/*
game.cs2.caddy.handle_path.file_server: browse
game.cs2.caddy.handle_path.file_server.root: /srv/www
ds3:
image: timleonarduk/ds3os:latest
labels:
game.ds3.caddy: http://
game.ds3.caddy.reverse_proxy: 127.0.0.1:50005
services:
gitlab-postgres-webui:
image: sosedoff/pgweb:latest
labels:
nas.gitlab.caddy: http://postgres.gitlab.mydomain
nas.gitlab.caddy.reverse_proxy: 127.0.0.1:5433
harbor-redis-webui:
image: ghcr.io/joeferner/redis-commander:latest
labels:
nas.harbor.caddy: https://redis.harbor.mydomain
nas.harbor.caddy.import: tls
nas.harbor.caddy.reverse_proxy: 127.0.0.1:6380
nas.gitlab.caddy prefix is better than nas-gitlab-caddy because it is in consistence with labels like com.docker.compose.