
lucaslorentz/caddy-docker-proxycaddy-docker-proxy 是 Caddy 2 的一款扩展模块,能让你通过 Docker 容器的标签(labels)自动配置反向代理,无需手动编写和维护 Caddyfile。它会监听 Docker 事件(如容器启动、停止),实时生成或更新 Caddy 配置,帮你快速搭建基于 Caddy 的反向代理服务。
/api 转发到特定服务),满足复杂的代理需求。headers、rate_limit、rewrite 等),直接通过标签配置。首先需要安装 Caddy 并启用 caddy-docker-proxy 模块。推荐用官方提供的集成镜像(已预装模块),或手动编译:
直接拉取包含模块的 Caddy 镜像:
bashdocker pull lucaslorentz/caddy-docker-proxy:ci-alpine
通过 xcaddy 编译带模块的 Caddy:
bashxcaddy build --with github.com/lucaslorentz/caddy-docker-proxy/v2
启动时需挂载 Docker Socket(让 Caddy 监听 Docker 事件),并映射 80/443 端口:
bashdocker run -d \ --name caddy \ -p 80:80 \ -p 443:443 \ -v /var/run/docker.sock:/var/run/docker.sock \ # 挂载 Docker Socket -v caddy_data:/data \ # 存储证书、配置等数据 lucaslorentz/caddy-docker-proxy:ci-alpine
给需要代理的应用容器添加 caddy.* 格式的标签,定义代理规则。
假设你有个运行在 8080 端口的 Node.js 服务(容器名 my-app),想通过 app.example.com 访问:
启动应用容器时添加标签:
bashdocker run -d \ --name my-app \ -l caddy.host=app.example.com \ # 绑定域名 -l caddy.reverse_proxy=[***] \ # 反向代理到容器内服务 my-node-app:latest # 你的应用镜像
caddy.host: 绑定的域名(支持多个,用逗号分隔,如 caddy.host=app1.example.com,app2.example.com)。caddy.reverse_proxy: 定义代理目标,格式同 Caddyfile(如 caddy.reverse_proxy=/api [***] 表示路径 /api转发到api-service:3000`)。caddy.指令名=参数,如 caddy.header.Strict-Transport-Security=max-age=31536000; includeSubDomains(添加 HSTS 头)。容器启动后,caddy-docker-proxy 会自动生成配置。访问 `[***] Caddy 所在服务器),即可看到应用服务的响应。
/var/run/docker.sock 会让 Caddy 有权限操作 Docker 资源,生产环境建议通过用户组或第三方工具(如 docker-socket-proxy)限制权限。caddy.reverse_proxy.0=/api、`caddy.reverse_proxy.1=[***]docker logs caddy。通过以上步骤,你可以快速用 Docker 标签管理 Caddy 反向代理,尤其适合多容器、动态部署的场景。
manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务