1. The problem I’m having:
So, I’d like to have each container (if possible) in their own network (to improve security) but I’d still like caddy to be able to be used as a reverse proxy. However, caddy isn’t able to get the upstream port. I’ve also tried to add the caddy_ingress_network label for each container as explained here:
You can also specify the ingress network per container/service by adding to it a label
caddy_ingress_networkwith the network name.
It still doesn’t work though.
2. Error messages and/or full log output:
{“level”:“info”,“ts”:1769472804.2777095,“logger”:“docker-proxy”,“msg”:“Running caddy proxy server”}
{“level”:“info”,“ts”:1769472804.2782907,“logger”:“admin”,“msg”:“admin endpoint started”,“address”:“localhost:2019”,“enforce_origin”:false,“origins”:\[“//localhost:2019”,“//\[::1\]:2019”,“//127.0.0.1:2019”\]}
{“level”:“info”,“ts”:1769472804.2783718,“msg”:“autosaved config (load with --resume flag)”,“file”:“/config/caddy/autosave.json”}
{“level”:“info”,“ts”:1769472804.2783754,“logger”:“docker-proxy”,“msg”:“Running caddy proxy controller”}
{“level”:“info”,“ts”:1769472804.2977865,“logger”:“docker-proxy”,“msg”:“Start”,“CaddyfilePath”:“”,“EnvFile”:“”,“LabelPrefix”:“caddy”,“PollingInterval”:30,“ProxyServiceTasks”:true,“ProcessCaddyfile”:true,“ScanStoppedContainers”:false,“IngressNetworks”:“\[caddy homarr grafana\]”,“DockerSockets”:\[“”\],“DockerCertsPath”:\[“”\],“DockerAPIsVersion”:\[“”\]}
{“level”:“info”,“ts”:1769472804.2983391,“logger”:“docker-proxy”,“msg”:“Connecting to docker events”,“DockerSocket”:“”}
{“level”:“error”,“ts”:1769472804.2983522,“logger”:“docker-proxy”,“msg”:“Docker events error”,“error”:“Error response from daemon: failed to parse event filters: scope is an invalid filter”}
{“level”:“info”,“ts”:1769472804.419844,“logger”:“docker-proxy”,“msg”:“IngressNetworksMap”,“ingres”:“map[ ]”}
{“level”:“info”,“ts”:1769472804.4418063,“logger”:“docker-proxy”,“msg”:“Swarm is available”,“new”:false}
{“level”:“warn”,“ts”:1769472804.446003,“logger”:“docker-proxy”,“msg”:“Container is not in same network as caddy”,“container”:“b685ce9a2e0be79364e1c53d451b555f1bfc8b9abc2ad0ed4f896952793f5cc4”,“container id”:“b685ce9a2e0be79364e1c53d451b555f1bfc8b9abc2ad0ed4f896952793f5cc4”}
{“level”:“info”,“ts”:1769472804.4475465,“logger”:“docker-proxy”,“msg”:“New Caddyfile”,“caddyfile”:“http://browse.pc.vpn.tornaxo7.de {\\n\\tencode\\n\\tfile_server browse\\n\\troot /browse\\n}\\nhttp://homarr.pc.vpn.tornaxo7.de {\\n\\treverse_proxy\\n}\\nhttp://pc.vpn.tornaxo7.de {\\n\\tencode\\n\\tfile_server\\n}\\n”}
{“level”:“info”,“ts”:1769472804.447816,“logger”:“docker-proxy”,“msg”:“New Config JSON”,“json”:“{"apps":{"http":{"servers":{"srv0":{"listen":\[":80"\],"routes":\[{"match":\[{"host":\["browse.pc.vpn.tornaxo7.de"\]}\],"handle":\[{"handler":"subroute","routes":\[{"handle":\[{"handler":"vars","root":"/browse"},{"encodings":{"gzip":{},"zstd":{}},"handler":"encode","prefer":\["zstd","gzip"\]},{"browse":{},"handler":"file_server","hide":\["./Caddyfile"\]}\]}\]}\],"terminal":true},{"match":\[{"host":\["homarr.pc.vpn.tornaxo7.de"\]}\],"handle":\[{"handler":"subroute","routes":\[{"handle":\[{"handler":"reverse_proxy"}\]}\]}\],"terminal":true},{"match":\[{"host":\["pc.vpn.tornaxo7.de"\]}\],"handle":\[{"handler":"subroute","routes":\[{"handle":\[{"encodings":{"gzip":{},"zstd":{}},"handler":"encode","prefer":\["zstd","gzip"\]},{"handler":"file_server","hide":\["./Caddyfile"\]}\]}\]}\],"terminal":true}\]}}}}}”}
{“level”:“info”,“ts”:1769472804.4478369,“logger”:“docker-proxy”,“msg”:“Sending configuration to”,“server”:“localhost”}
{“level”:“info”,“ts”:1769472804.448194,“logger”:“admin.api”,“msg”:“received request”,“method”:“POST”,“host”:“localhost:2019”,“uri”:“/load”,“remote_ip”:“127.0.0.1”,“remote_port”:“34892”,“headers”:{“Accept-Encoding”:\[“gzip”\],“Content-Length”:\[“810”\],“Content-Type”:\[“application/json”\],“User-Agent”:\[“Go-http-client/1.1”\]}}
{“level”:“info”,“ts”:1769472804.448607,“logger”:“admin”,“msg”:“admin endpoint started”,“address”:“localhost:2019”,“enforce_origin”:false,“origins”:\[“//localhost:2019”,“//\[::1\]:2019”,“//127.0.0.1:2019”\]}
{“level”:“warn”,“ts”:1769472804.4486856,“logger”:“http.auto_https”,“msg”:“server is listening only on the HTTP port, so no automatic HTTPS will be applied to this server”,“server_name”:“srv0”,“http_port”:80}
{“level”:“info”,“ts”:1769472804.4487653,“logger”:“tls.cache.maintenance”,“msg”:“started background certificate maintenance”,“cache”:“0xc000681080”}
{“level”:“warn”,“ts”:1769472804.4488668,“logger”:“http”,“msg”:“HTTP/2 skipped because it requires TLS”,“network”:“tcp”,“addr”:“:80”}
{“level”:“warn”,“ts”:1769472804.4488697,“logger”:“http”,“msg”:“HTTP/3 skipped because it requires TLS”,“network”:“tcp”,“addr”:“:80”}
{“level”:“info”,“ts”:1769472804.448871,“logger”:“http.log”,“msg”:“server running”,“name”:“srv0”,“protocols”:\[“h1”,“h2”,“h3”\]}
{“level”:“info”,“ts”:1769472804.4489605,“msg”:“autosaved config (load with --resume flag)”,“file”:“/config/caddy/autosave.json”}
{“level”:“info”,“ts”:1769472804.4489646,“logger”:“admin.api”,“msg”:“load complete”}
{“level”:“info”,“ts”:1769472804.4490292,“logger”:“docker-proxy”,“msg”:“Successfully configured”,“server”:“localhost”}
{“level”:“info”,“ts”:1769472804.4500377,“logger”:“admin”,“msg”:“stopped previous server”,“address”:“localhost:2019”}
{“level”:“info”,“ts”:1769472804.4507673,“logger”:“tls”,“msg”:“storage cleaning happened too recently; skipping for now”,“storage”:“FileStorage:/data/caddy”,“instance”:“3ec9fbb2-e8fd-42c1-a62e-1a6917d5597f”,“try_again”:1769559204.450766,“try_again_in”:86399.99999975}
{“level”:“info”,“ts”:1769472804.4508386,“logger”:“tls”,“msg”:“finished cleaning storage units”}
{“level”:“error”,“ts”:1769472805.2571235,“logger”:“http.log.error”,“msg”:“no upstreams available”,“request”:{“remote_ip”:“10.89.0.2”,“remote_port”:“49184”,“client_ip”:“10.89.0.2”,“proto”:“HTTP/1.1”,“method”:“GET”,“host”:“homarr.pc.vpn.tornaxo7.de”,“uri”:“/”,“headers”:{“Accept-Encoding”:\[“gzip, deflate”\],“Connection”:\[“keep-alive”\],“Upgrade-Insecure-Requests”:\[“1”\],“Priority”:\[“u=0, i”\],“User-Agent”:\[“Mozilla/5.0 (X11; Linux x86_64; rv:147.0) Gecko/20100101 Firefox/147.0”\],“Accept”:\[“text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8”\],“Accept-Language”:\[“en-US,en;q=0.9”\],“Cookie”:\[“REDACTED”\]}},“duration”:0.000095674,“status”:503,“err_id”:“urijgfp0a”,“err_trace”:“reverseproxy.(*Handler).proxyLoopIteration (reverseproxy.go:540)“}
{“level”:“error”,“ts”:1769472806.2108116,“logger”:“http.log.error”,“msg”:“no upstreams available”,“request”:{“remote_ip”:“10.89.0.2”,“remote_port”:“49184”,“client_ip”:“10.89.0.2”,“proto”:“HTTP/1.1”,“method”:“GET”,“host”:“homarr.pc.vpn.tornaxo7.de”,“uri”:”/",“headers”:{“Accept-Language”:\[“en-US,en;q=0.9”\],“Accept-Encoding”:\[“gzip, deflate”\],“Connection”:\[“keep-alive”\],“Cookie”:\[“REDACTED”\],“Upgrade-Insecure-Requests”:\[“1”\],“Priority”:\[“u=0, i”\],“User-Agent”:\[“Mozilla/5.0 (X11; Linux x86_64; rv:147.0) Gecko/20100101 Firefox/147.0”\],“Accept”:\["text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"\]}},“duration”:0.000046398,“status”:503,“err_id”:“9nsgu2p4y”,“err_trace”:"reverseproxy.(Handler).proxyLoopIteration (reverseproxy.go:540)“}
{“level”:“error”,“ts”:1769472806.483072,“logger”:“http.log.error”,“msg”:“no upstreams available”,“request”:{“remote_ip”:“10.89.0.2”,“remote_port”:“49184”,“client_ip”:“10.89.0.2”,“proto”:“HTTP/1.1”,“method”:“GET”,“host”:“homarr.pc.vpn.tornaxo7.de”,“uri”:”/",“headers”:{“Accept-Language”:\[“en-US,en;q=0.9”\],“Connection”:\[“keep-alive”\],“Priority”:\[“u=0, i”\],“User-Agent”:\[“Mozilla/5.0 (X11; Linux x86_64; rv:147.0) Gecko/20100101 Firefox/147.0”\],“Accept-Encoding”:\[“gzip, deflate”\],“Cookie”:\[“REDACTED”\],“Upgrade-Insecure-Requests”:\[“1”\],“Accept”:\["text/html,application/xhtml+xml,application/xml;q=0.9,*/;q=0.8”\]}},“duration”:0.000039273,“status”:503,“err_id”:“gh6g1i4hk”,“err_trace”:“reverseproxy.(*Handler).proxyLoopIteration (reverseproxy.go:540)“}
{“level”:“error”,“ts”:1769472806.7209845,“logger”:“http.log.error”,“msg”:“no upstreams available”,“request”:{“remote_ip”:“10.89.0.2”,“remote_port”:“49184”,“client_ip”:“10.89.0.2”,“proto”:“HTTP/1.1”,“method”:“GET”,“host”:“homarr.pc.vpn.tornaxo7.de”,“uri”:”/",“headers”:{“Accept-Encoding”:\[“gzip, deflate”\],“Connection”:\[“keep-alive”\],“Cookie”:\[“REDACTED”\],“Priority”:\[“u=0, i”\],“User-Agent”:\[“Mozilla/5.0 (X11; Linux x86_64; rv:147.0) Gecko/20100101 Firefox/147.0”\],“Accept”:\["text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"\],“Accept-Language”:\[“en-US,en;q=0.9”\],“Upgrade-Insecure-Requests”:\[“1”\]}},“duration”:0.000035719,“status”:503,“err_id”:“txb554vk2”,“err_trace”:"reverseproxy.(Handler).proxyLoopIteration (reverseproxy.go:540)“}
{“level”:“error”,“ts”:1769472806.9091842,“logger”:“http.log.error”,“msg”:“no upstreams available”,“request”:{“remote_ip”:“10.89.0.2”,“remote_port”:“49184”,“client_ip”:“10.89.0.2”,“proto”:“HTTP/1.1”,“method”:“GET”,“host”:“homarr.pc.vpn.tornaxo7.de”,“uri”:”/",“headers”:{“Accept”:\["text/html,application/xhtml+xml,application/xml;q=0.9,*/;q=0.8”\],“Accept-Language”:\[“en-US,en;q=0.9”\],“Accept-Encoding”:\[“gzip, deflate”\],“Cookie”:\[“REDACTED”\],“User-Agent”:\[“Mozilla/5.0 (X11; Linux x86_64; rv:147.0) Gecko/20100101 Firefox/147.0”\],“Connection”:\[“keep-alive”\],“Upgrade-Insecure-Requests”:\[“1”\],“Priority”:\[“u=0, i”\]}},“duration”:0.000043466,“status”:503,“err_id”:“rgexu5hy8”,“err_trace”:“reverseproxy.(*Handler).proxyLoopIteration (reverseproxy.go:540)“}
{“level”:“error”,“ts”:1769472807.0473127,“logger”:“http.log.error”,“msg”:“no upstreams available”,“request”:{“remote_ip”:“10.89.0.2”,“remote_port”:“49184”,“client_ip”:“10.89.0.2”,“proto”:“HTTP/1.1”,“method”:“GET”,“host”:“homarr.pc.vpn.tornaxo7.de”,“uri”:”/",“headers”:{“Priority”:\[“u=0, i”\],“Accept”:\["text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"\],“Accept-Language”:\[“en-US,en;q=0.9”\],“Connection”:\[“keep-alive”\],“Cookie”:\[“REDACTED”\],“User-Agent”:\[“Mozilla/5.0 (X11; Linux x86_64; rv:147.0) Gecko/20100101 Firefox/147.0”\],“Accept-Encoding”:\[“gzip, deflate”\],“Upgrade-Insecure-Requests”:\[“1”\]}},“duration”:0.000041114,“status”:503,“err_id”:“6iqjrckwv”,“err_trace”:"reverseproxy.(Handler).proxyLoopIteration (reverseproxy.go:540)“}
{“level”:“info”,“ts”:1769472834.4016192,“logger”:“docker-proxy”,“msg”:“Connecting to docker events”,“DockerSocket”:”“}
{“level”:“error”,“ts”:1769472834.4016569,“logger”:“docker-proxy”,“msg”:“Docker events error”,“error”:“Error response from daemon: failed to parse event filters: scope is an invalid filter”}
{“level”:“warn”,“ts”:1769472834.4249902,“logger”:“docker-proxy”,“msg”:“Container is not in same network as caddy”,“container”:“b685ce9a2e0be79364e1c53d451b555f1bfc8b9abc2ad0ed4f896952793f5cc4”,“container id”:“b685ce9a2e0be79364e1c53d451b555f1bfc8b9abc2ad0ed4f896952793f5cc4”}
{“level”:“warn”,“ts”:1769472834.4250765,“logger”:“docker-proxy”,“msg”:“Container is not in same network as caddy”,“container”:“5a52e621b428c0e868860d3ff7ab4dd1e0ee32540a5bab2382605b699d9bc751”,“container id”:“5a52e621b428c0e868860d3ff7ab4dd1e0ee32540a5bab2382605b699d9bc751”}
{“level”:“info”,“ts”:1769472834.427006,“logger”:“docker-proxy”,“msg”:“New Caddyfile”,“caddyfile”:“http://browse.pc.vpn.tornaxo7.de {\\n\\tencode\\n\\tfile_server browse\\n\\troot /browse\\n}\\nhttp://grafana.pc.vpn.tornaxo7.de {\\n\\treverse_proxy\\n}\\nhttp://homarr.pc.vpn.tornaxo7.de {\\n\\treverse_proxy\\n}\\nhttp://pc.vpn.tornaxo7.de {\\n\\tencode\\n\\tfile_server\\n}\\n”}
{“level”:“info”,“ts”:1769472834.4278731,“logger”:“docker-proxy”,“msg”:“New Config JSON”,“json”:”{"apps":{"http":{"servers":{"srv0":{"listen":\[":80"\],"routes":\[{"match":\[{"host":\["grafana.pc.vpn.tornaxo7.de"\]}\],"handle":\[{"handler":"subroute","routes":\[{"handle":\[{"handler":"reverse_proxy"}\]}\]}\],"terminal":true},{"match":\[{"host":\["browse.pc.vpn.tornaxo7.de"\]}\],"handle":\[{"handler":"subroute","routes":\[{"handle":\[{"handler":"vars","root":"/browse"},{"encodings":{"gzip":{},"zstd":{}},"handler":"encode","prefer":\["zstd","gzip"\]},{"browse":{},"handler":"file_server","hide":\["./Caddyfile"\]}\]}\]}\],"terminal":true},{"match":\[{"host":\["homarr.pc.vpn.tornaxo7.de"\]}\],"handle":\[{"handler":"subroute","routes":\[{"handle":\[{"handler":"reverse_proxy"}\]}\]}\],"terminal":true},{"match":\[{"host":\["pc.vpn.tornaxo7.de"\]}\],"handle":\[{"handler":"subroute","routes":\[{"handle":\[{"encodings":{"gzip":{},"zstd":{}},"handler":"encode","prefer":\["zstd","gzip"\]},{"handler":"file_server","hide":\["./Caddyfile"\]}\]}\]}\],"terminal":true}\]}}}}}“}
{“level”:“info”,“ts”:1769472834.4279432,“logger”:“docker-proxy”,“msg”:“Sending configuration to”,“server”:“localhost”}
{“level”:“info”,“ts”:1769472834.4292347,“logger”:“admin.api”,“msg”:“received request”,“method”:“POST”,“host”:“localhost:2019”,“uri”:”/load",“remote_ip”:“127.0.0.1”,“remote_port”:“60912”,“headers”:{“Accept-Encoding”:\[“gzip”\],“Content-Length”:\[“964”\],“Content-Type”:\[“application/json”\],“User-Agent”:\[“Go-http-client/1.1”\]}}
{“level”:“info”,“ts”:1769472834.43125,“logger”:“admin”,“msg”:“admin endpoint started”,“address”:“localhost:2019”,“enforce_origin”:false,“origins”:\[“//localhost:2019”,“//\[::1\]:2019”,“//127.0.0.1:2019”\]}
{“level”:“warn”,“ts”:1769472834.4315803,“logger”:“http.auto_https”,“msg”:“server is listening only on the HTTP port, so no automatic HTTPS will be applied to this server”,“server_name”:“srv0”,“http_port”:80}
{“level”:“warn”,“ts”:1769472834.4325264,“logger”:“http”,“msg”:“HTTP/2 skipped because it requires TLS”,“network”:“tcp”,“addr”:“:80”}
{“level”:“warn”,“ts”:1769472834.4325461,“logger”:“http”,“msg”:“HTTP/3 skipped because it requires TLS”,“network”:“tcp”,“addr”:“:80”}
{“level”:“info”,“ts”:1769472834.4325538,“logger”:“http.log”,“msg”:“server running”,“name”:“srv0”,“protocols”:\[“h1”,“h2”,“h3”\]}
{“level”:“info”,“ts”:1769472834.4326177,“logger”:“http”,“msg”:“servers shutting down with eternal grace period”}
{“level”:“info”,“ts”:1769472834.4330392,“msg”:“autosaved config (load with --resume flag)”,“file”:“/config/caddy/autosave.json”}
{“level”:“info”,“ts”:1769472834.4330747,“logger”:“admin.api”,“msg”:“load complete”}
{“level”:“info”,“ts”:1769472834.4333727,“logger”:“docker-proxy”,“msg”:“Successfully configured”,“server”:“localhost”}
{“level”:“info”,“ts”:1769472834.4354475,“logger”:“admin”,“msg”:“stopped previous server”,“address”:“localhost:2019”}
{“level”:“error”,“ts”:1769472834.6352625,“logger”:“http.log.error”,“msg”:“no upstreams available”,“request”:{“remote_ip”:“10.89.0.2”,“remote_port”:“47156”,“client_ip”:“10.89.0.2”,“proto”:“HTTP/1.1”,“method”:“GET”,“host”:“grafana.pc.vpn.tornaxo7.de”,“uri”:“/”,“headers”:{“Connection”:\[“keep-alive”\],“Upgrade-Insecure-Requests”:\[“1”\],“Priority”:\[“u=0, i”\],“User-Agent”:\[“Mozilla/5.0 (X11; Linux x86_64; rv:147.0) Gecko/20100101 Firefox/147.0”\],“Accept”:\["text/html,application/xhtml+xml,application/xml;q=0.9,*/;q=0.8”\],“Accept-Language”:\[“en-US,en;q=0.9”\],“Accept-Encoding”:\[“gzip, deflate”\]}},“duration”:0.000062617,“status”:503,“err_id”:“aw164ss06”,“err_trace”:“reverseproxy.(*Handler).proxyLoopIteration (reverseproxy.go:540)“}
{“level”:“error”,“ts”:1769472835.8328857,“logger”:“http.log.error”,“msg”:“no upstreams available”,“request”:{“remote_ip”:“10.89.0.2”,“remote_port”:“47156”,“client_ip”:“10.89.0.2”,“proto”:“HTTP/1.1”,“method”:“GET”,“host”:“grafana.pc.vpn.tornaxo7.de”,“uri”:”/",“headers”:{“Accept”:\["text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"\],“Accept-Language”:\[“en-US,en;q=0.9”\],“Accept-Encoding”:\[“gzip, deflate”\],“Connection”:\[“keep-alive”\],“Upgrade-Insecure-Requests”:\[“1”\],“Priority”:\[“u=0, i”\],“User-Agent”:\[“Mozilla/5.0 (X11; Linux x86_64; rv:147.0) Gecko/20100101 Firefox/147.0”\]}},“duration”:0.000103482,“status”:503,“err_id”:“d5h1zv9ab”,“err_trace”:"reverseproxy.(Handler).proxyLoopIteration (reverseproxy.go:540)“}
{“level”:“error”,“ts”:1769472836.351758,“logger”:“http.log.error”,“msg”:“no upstreams available”,“request”:{“remote_ip”:“10.89.0.2”,“remote_port”:“47156”,“client_ip”:“10.89.0.2”,“proto”:“HTTP/1.1”,“method”:“GET”,“host”:“grafana.pc.vpn.tornaxo7.de”,“uri”:”/",“headers”:{“Accept-Language”:\[“en-US,en;q=0.9”\],“Accept-Encoding”:\[“gzip, deflate”\],“Connection”:\[“keep-alive”\],“Upgrade-Insecure-Requests”:\[“1”\],“Priority”:\[“u=0, i”\],“User-Agent”:\[“Mozilla/5.0 (X11; Linux x86_64; rv:147.0) Gecko/20100101 Firefox/147.0”\],“Accept”:\["text/html,application/xhtml+xml,application/xml;q=0.9,*/;q=0.8”\]}},“duration”:0.000123324,“status”:503,“err_id”:“mk3wxj3jx”,“err_trace”:“reverseproxy.(*Handler).proxyLoopIteration (reverseproxy.go:540)“}
{“level”:“error”,“ts”:1769472836.5635452,“logger”:“http.log.error”,“msg”:“no upstreams available”,“request”:{“remote_ip”:“10.89.0.2”,“remote_port”:“47156”,“client_ip”:“10.89.0.2”,“proto”:“HTTP/1.1”,“method”:“GET”,“host”:“grafana.pc.vpn.tornaxo7.de”,“uri”:”/",“headers”:{“User-Agent”:\[“Mozilla/5.0 (X11; Linux x86_64; rv:147.0) Gecko/20100101 Firefox/147.0”\],“Accept”:\["text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"\],“Accept-Language”:\[“en-US,en;q=0.9”\],“Accept-Encoding”:\[“gzip, deflate”\],“Connection”:\[“keep-alive”\],“Upgrade-Insecure-Requests”:\[“1”\],“Priority”:\[“u=0, i”\]}},“duration”:0.000068783,“status”:503,“err_id”:“dht1wwi6j”,“err_trace”:"reverseproxy.(Handler).proxyLoopIteration (reverseproxy.go:540)“}
{“level”:“error”,“ts”:1769472836.7039332,“logger”:“http.log.error”,“msg”:“no upstreams available”,“request”:{“remote_ip”:“10.89.0.2”,“remote_port”:“47156”,“client_ip”:“10.89.0.2”,“proto”:“HTTP/1.1”,“method”:“GET”,“host”:“grafana.pc.vpn.tornaxo7.de”,“uri”:”/",“headers”:{“Accept-Encoding”:\[“gzip, deflate”\],“Connection”:\[“keep-alive”\],“Upgrade-Insecure-Requests”:\[“1”\],“Priority”:\[“u=0, i”\],“User-Agent”:\[“Mozilla/5.0 (X11; Linux x86_64; rv:147.0) Gecko/20100101 Firefox/147.0”\],“Accept”:\["text/html,application/xhtml+xml,application/xml;q=0.9,*/;q=0.8”\],“Accept-Language”:\[“en-US,en;q=0.9”\]}},“duration”:0.000117393,“status”:503,“err_id”:“wfqz2dreu”,“err_trace”:“reverseproxy.(*Handler).proxyLoopIteration (reverseproxy.go:540)“}
{“level”:“error”,“ts”:1769472836.7865682,“logger”:“http.log.error”,“msg”:“no upstreams available”,“request”:{“remote_ip”:“10.89.0.2”,“remote_port”:“47156”,“client_ip”:“10.89.0.2”,“proto”:“HTTP/1.1”,“method”:“GET”,“host”:“grafana.pc.vpn.tornaxo7.de”,“uri”:”/",“headers”:{“Accept-Language”:\[“en-US,en;q=0.9”\],“Accept-Encoding”:\[“gzip, deflate”\],“Connection”:\[“keep-alive”\],“Upgrade-Insecure-Requests”:\[“1”\],“Priority”:\[“u=0, i”\],“User-Agent”:\[“Mozilla/5.0 (X11; Linux x86_64; rv:147.0) Gecko/20100101 Firefox/147.0”\],“Accept”:\["text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"\]}},“duration”:0.000095179,“status”:503,“err_id”:“5vk8h9dwu”,“err_trace”:"reverseproxy.(Handler).proxyLoopIteration (reverseproxy.go:540)“}
{“level”:“error”,“ts”:1769472836.91622,“logger”:“http.log.error”,“msg”:“no upstreams available”,“request”:{“remote_ip”:“10.89.0.2”,“remote_port”:“47156”,“client_ip”:“10.89.0.2”,“proto”:“HTTP/1.1”,“method”:“GET”,“host”:“grafana.pc.vpn.tornaxo7.de”,“uri”:”/",“headers”:{“Accept-Encoding”:\[“gzip, deflate”\],“Connection”:\[“keep-alive”\],“Upgrade-Insecure-Requests”:\[“1”\],“Priority”:\[“u=0, i”\],“User-Agent”:\[“Mozilla/5.0 (X11; Linux x86_64; rv:147.0) Gecko/20100101 Firefox/147.0”\],“Accept”:\["text/html,application/xhtml+xml,application/xml;q=0.9,*/;q=0.8”\],“Accept-Language”:\[“en-US,en;q=0.9”\]}},“duration”:0.000055861,“status”:503,“err_id”:“7fa4bnhf2”,“err_trace”:“reverseproxy.(\*Handler).proxyLoopIteration (reverseproxy.go:540)”}
{“level”:“info”,“ts”:1769472864.402932,“logger”:“docker-proxy”,“msg”:“Connecting to docker events”,“DockerSocket”:“”}
{“level”:“error”,“ts”:1769472864.4029567,“logger”:“docker-proxy”,“msg”:“Docker events error”,“error”:“Error response from daemon: failed to parse event filters: scope is an invalid filter”}
{“level”:“warn”,“ts”:1769472864.415177,“logger”:“docker-proxy”,“msg”:“Container is not in same network as caddy”,“container”:“b685ce9a2e0be79364e1c53d451b555f1bfc8b9abc2ad0ed4f896952793f5cc4”,“container id”:“b685ce9a2e0be79364e1c53d451b555f1bfc8b9abc2ad0ed4f896952793f5cc4”}
{“level”:“warn”,“ts”:1769472864.4152136,“logger”:“docker-proxy”,“msg”:“Container is not in same network as caddy”,“container”:“5a52e621b428c0e868860d3ff7ab4dd1e0ee32540a5bab2382605b699d9bc751”,“container id”:“5a52e621b428c0e868860d3ff7ab4dd1e0ee32540a5bab2382605b699d9bc751”}
{“level”:“info”,“ts”:1769472894.404798,“logger”:“docker-proxy”,“msg”:“Connecting to docker events”,“DockerSocket”:“”}
{“level”:“error”,“ts”:1769472894.4048367,“logger”:“docker-proxy”,“msg”:“Docker events error”,“error”:“Error response from daemon: failed to parse event filters: scope is an invalid filter”}
{“level”:“warn”,“ts”:1769472894.4471378,“logger”:“docker-proxy”,“msg”:“Container is not in same network as caddy”,“container”:“b685ce9a2e0be79364e1c53d451b555f1bfc8b9abc2ad0ed4f896952793f5cc4”,“container id”:“b685ce9a2e0be79364e1c53d451b555f1bfc8b9abc2ad0ed4f896952793f5cc4”}
{“level”:“warn”,“ts”:1769472894.4471695,“logger”:“docker-proxy”,“msg”:“Container is not in same network as caddy”,“container”:“5a52e621b428c0e868860d3ff7ab4dd1e0ee32540a5bab2382605b699d9bc751”,“container id”:“5a52e621b428c0e868860d3ff7ab4dd1e0ee32540a5bab2382605b699d9bc751”}
{“level”:“warn”,“ts”:1769472924.3676233,“logger”:“docker-proxy”,“msg”:“Container is not in same network as caddy”,“container”:“b685ce9a2e0be79364e1c53d451b555f1bfc8b9abc2ad0ed4f896952793f5cc4”,“container id”:“b685ce9a2e0be79364e1c53d451b555f1bfc8b9abc2ad0ed4f896952793f5cc4”}
{“level”:“warn”,“ts”:1769472924.3676627,“logger”:“docker-proxy”,“msg”:“Container is not in same network as caddy”,“container”:“5a52e621b428c0e868860d3ff7ab4dd1e0ee32540a5bab2382605b699d9bc751”,“container id”:“5a52e621b428c0e868860d3ff7ab4dd1e0ee32540a5bab2382605b699d9bc751”}
{“level”:“info”,“ts”:1769472924.406011,“logger”:“docker-proxy”,“msg”:“Connecting to docker events”,“DockerSocket”:“”}
{“level”:“error”,“ts”:1769472924.4060307,“logger”:“docker-proxy”,“msg”:“Docker events error”,“error”:“Error response from daemon: failed to parse event filters: scope is an invalid filter”}
{“level”:“info”,“ts”:1769472954.4088433,“logger”:“docker-proxy”,“msg”:“Connecting to docker events”,“DockerSocket”:“”}
{“level”:“error”,“ts”:1769472954.408888,“logger”:“docker-proxy”,“msg”:“Docker events error”,“error”:“Error response from daemon: failed to parse event filters: scope is an invalid filter”}
{“level”:“warn”,“ts”:1769472954.4112327,“logger”:“docker-proxy”,“msg”:“Container is not in same network as caddy”,“container”:“b685ce9a2e0be79364e1c53d451b555f1bfc8b9abc2ad0ed4f896952793f5cc4”,“container id”:“b685ce9a2e0be79364e1c53d451b555f1bfc8b9abc2ad0ed4f896952793f5cc4”}
{“level”:“warn”,“ts”:1769472954.411259,“logger”:“docker-proxy”,“msg”:“Container is not in same network as caddy”,“container”:“5a52e621b428c0e868860d3ff7ab4dd1e0ee32540a5bab2382605b699d9bc751”,“container id”:“5a52e621b428c0e868860d3ff7ab4dd1e0ee32540a5bab2382605b699d9bc751”}
{“level”:“info”,“ts”:1769472984.4107192,“logger”:“docker-proxy”,“msg”:“Connecting to docker events”,“DockerSocket”:“”}
{“level”:“error”,“ts”:1769472984.4107447,“logger”:“docker-proxy”,“msg”:“Docker events error”,“error”:“Error response from daemon: failed to parse event filters: scope is an invalid filter”}
{“level”:“warn”,“ts”:1769472984.4359233,“logger”:“docker-proxy”,“msg”:“Container is not in same network as caddy”,“container”:“b685ce9a2e0be79364e1c53d451b555f1bfc8b9abc2ad0ed4f896952793f5cc4”,“container id”:“b685ce9a2e0be79364e1c53d451b555f1bfc8b9abc2ad0ed4f896952793f5cc4”}
{“level”:“warn”,“ts”:1769472984.4359596,“logger”:“docker-proxy”,“msg”:“Container is not in same network as caddy”,“container”:“5a52e621b428c0e868860d3ff7ab4dd1e0ee32540a5bab2382605b699d9bc751”,“container id”:“5a52e621b428c0e868860d3ff7ab4dd1e0ee32540a5bab2382605b699d9bc751”}
{“level”:“info”,“ts”:1769473014.4120667,“logger”:“docker-proxy”,“msg”:“Connecting to docker events”,“DockerSocket”:“”}
{“level”:“error”,“ts”:1769473014.4120896,“logger”:“docker-proxy”,“msg”:“Docker events error”,“error”:“Error response from daemon: failed to parse event filters: scope is an invalid filter”}
{“level”:“warn”,“ts”:1769473014.426379,“logger”:“docker-proxy”,“msg”:“Container is not in same network as caddy”,“container”:“b685ce9a2e0be79364e1c53d451b555f1bfc8b9abc2ad0ed4f896952793f5cc4”,“container id”:“b685ce9a2e0be79364e1c53d451b555f1bfc8b9abc2ad0ed4f896952793f5cc4”}
{“level”:“warn”,“ts”:1769473014.426405,“logger”:“docker-proxy”,“msg”:“Container is not in same network as caddy”,“container”:“5a52e621b428c0e868860d3ff7ab4dd1e0ee32540a5bab2382605b699d9bc751”,“container id”:“5a52e621b428c0e868860d3ff7ab4dd1e0ee32540a5bab2382605b699d9bc751”}
{“level”:“info”,“ts”:1769473044.4135911,“logger”:“docker-proxy”,“msg”:“Connecting to docker events”,“DockerSocket”:“”}
{“level”:“error”,“ts”:1769473044.4136076,“logger”:“docker-proxy”,“msg”:“Docker events error”,“error”:“Error response from daemon: failed to parse event filters: scope is an invalid filter”}
{“level”:“warn”,“ts”:1769473044.4276745,“logger”:“docker-proxy”,“msg”:“Container is not in same network as caddy”,“container”:“b685ce9a2e0be79364e1c53d451b555f1bfc8b9abc2ad0ed4f896952793f5cc4”,“container id”:“b685ce9a2e0be79364e1c53d451b555f1bfc8b9abc2ad0ed4f896952793f5cc4”}
{“level”:“warn”,“ts”:1769473044.4277089,“logger”:“docker-proxy”,“msg”:“Container is not in same network as caddy”,“container”:“5a52e621b428c0e868860d3ff7ab4dd1e0ee32540a5bab2382605b699d9bc751”,“container id”:“5a52e621b428c0e868860d3ff7ab4dd1e0ee32540a5bab2382605b699d9bc751”}
{“level”:“info”,“ts”:1769473074.4150746,“logger”:“docker-proxy”,“msg”:“Connecting to docker events”,“DockerSocket”:“”}
{“level”:“error”,“ts”:1769473074.415086,“logger”:“docker-proxy”,“msg”:“Docker events error”,“error”:“Error response from daemon: failed to parse event filters: scope is an invalid filter”}
{“level”:“warn”,“ts”:1769473074.4348278,“logger”:“docker-proxy”,“msg”:“Container is not in same network as caddy”,“container”:“b685ce9a2e0be79364e1c53d451b555f1bfc8b9abc2ad0ed4f896952793f5cc4”,“container id”:“b685ce9a2e0be79364e1c53d451b555f1bfc8b9abc2ad0ed4f896952793f5cc4”}
{“level”:“warn”,“ts”:1769473074.4348686,“logger”:“docker-proxy”,“msg”:“Container is not in same network as caddy”,“container”:“5a52e621b428c0e868860d3ff7ab4dd1e0ee32540a5bab2382605b699d9bc751”,“container id”:“5a52e621b428c0e868860d3ff7ab4dd1e0ee32540a5bab2382605b699d9bc751”}
{“level”:“info”,“ts”:1769473104.4522202,“logger”:“docker-proxy”,“msg”:“Connecting to docker events”,“DockerSocket”:“”}
{“level”:“error”,“ts”:1769473104.4522448,“logger”:“docker-proxy”,“msg”:“Docker events error”,“error”:“Error response from daemon: failed to parse event filters: scope is an invalid filter”}
{“level”:“warn”,“ts”:1769473104.4602902,“logger”:“docker-proxy”,“msg”:“Container is not in same network as caddy”,“container”:“b685ce9a2e0be79364e1c53d451b555f1bfc8b9abc2ad0ed4f896952793f5cc4”,“container id”:“b685ce9a2e0be79364e1c53d451b555f1bfc8b9abc2ad0ed4f896952793f5cc4”}
{“level”:“warn”,“ts”:1769473104.4603233,“logger”:“docker-proxy”,“msg”:“Container is not in same network as caddy”,“container”:“5a52e621b428c0e868860d3ff7ab4dd1e0ee32540a5bab2382605b699d9bc751”,“container id”:“5a52e621b428c0e868860d3ff7ab4dd1e0ee32540a5bab2382605b699d9bc751”}
{“level”:“warn”,“ts”:1769473134.451997,“logger”:“docker-proxy”,“msg”:“Container is not in same network as caddy”,“container”:“b685ce9a2e0be79364e1c53d451b555f1bfc8b9abc2ad0ed4f896952793f5cc4”,“container id”:“b685ce9a2e0be79364e1c53d451b555f1bfc8b9abc2ad0ed4f896952793f5cc4”}
{“level”:“warn”,“ts”:1769473134.4520383,“logger”:“docker-proxy”,“msg”:“Container is not in same network as caddy”,“container”:“5a52e621b428c0e868860d3ff7ab4dd1e0ee32540a5bab2382605b699d9bc751”,“container id”:“5a52e621b428c0e868860d3ff7ab4dd1e0ee32540a5bab2382605b699d9bc751”}
{“level”:“info”,“ts”:1769473134.4529474,“logger”:“docker-proxy”,“msg”:“Connecting to docker events”,“DockerSocket”:“”}
{“level”:“error”,“ts”:1769473134.452954,“logger”:“docker-proxy”,“msg”:“Docker events error”,“error”:“Error response from daemon: failed to parse event filters: scope is an invalid filter”}
3. Caddy version:
2.11
4. How I installed and ran Caddy:
Using podman-compose.
a. System environment:
podman-compose (NixOS, stable)
b. Command:
podman compose up -d
c. Service/unit/compose file:
./caddy/Dockerfile
ARG VERSION=2.11
FROM caddy:${VERSION}-builder-alpine AS builder
RUN --mount=type=cache,target=/go/pkg/mod \
--mount=type=cache,target=/root/.cache/go-build \
xcaddy build \
--with github.com/lucaslorentz/caddy-docker-proxy/v2
FROM caddy:${VERSION}-alpine
COPY --from=builder /usr/bin/caddy /usr/bin/caddy
CMD ["caddy", "docker-proxy"]
compose.yaml
services:
caddy:
build: ./caddy
container_name: caddy
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./caddy/conf:/etc/caddy
- ./caddy/site:/srv
- ./caddy/browse:/browse
- caddy_data:/data
- caddy_config:/config
- ${XDG_RUNTIME_DIR}/podman/podman.sock:/var/run/docker.sock
networks:
- caddy
environment:
- CADDY_INGRESS_NETWORKS=caddy,homarr,grafana
labels:
caddy_0: http://${DOMAIN}
caddy_0.encode:
caddy_0.file_server:
caddy_ingress_network: "caddy"
caddy_1: http://browse.${DOMAIN}
caddy_1.encode:
caddy_1.root: /browse
caddy_1.file_server: browse
homarr:
container_name: homarr
image: ghcr.io/homarr-labs/homarr:latest
restart: unless-stopped
volumes:
- ./homarr/:/appdata
environment:
- SECRET_ENCRYPTION_KEY=1ce6b52370079cb1aed800f5e2e427e908ab4fa5ad6c7a0732567d35606a48c4
labels:
caddy: http://homarr.${DOMAIN}
caddy.reverse_proxy: "{{upstreams 7575}}"
networks:
- homarr
grafana:
container_name: grafana
image: grafana/grafana
restart: unless-stopped
user: root
volumes:
- ./grafana:/var/lib/grafana
labels:
caddy: http://grafana.${DOMAIN}
caddy.reverse_proxy: "{{upstreams 3000}}"
networks:
- grafana
volumes:
caddy_data:
caddy_config:
networks:
caddy:
homarr:
grafana:
d. My complete Caddy config:
It’s empty because somehow caddy-docker-proxy ignores my caddyfile so I’m forced to configure caddy by using labels (see here for more information).
5. Links to relevant resources:
None