Docker环境中作为反向代理的Caddy无法连接其他容器问题排查
问题根因
你混淆了容器内部监听端口和宿主机映射端口:
- Portainer容器通过
entrypoint: /portainer -p :80配置,内部实际监听的是80端口 - 你配置的
ports: "1000:80"仅作用于宿主机到容器的端口映射,容器之间在同一Docker网络通信时,直接使用容器内部端口即可,不需要走宿主机映射的1000端口
你Caddyfile里写的reverse_proxy portainer:1000是访问Portainer容器的1000端口,但该端口在容器内部根本没有服务监听,自然会返回连接拒绝的502错误。
修复步骤
- 修改你的Caddyfile配置,将反向代理端口改为Portainer容器内部监听的80端口:
smallhetzi.fading-flame.com { reverse_proxy portainer:80 }
- 进入Caddy的docker compose目录,执行以下命令重启Caddy容器生效:
docker compose up -d --force-recreate caddy
额外优化建议
你的Portainer compose配置中volumes字段存在冗余错误,建议修改:
原错误配置:
volumes: - /var/run/docker.sock:/var/run/docker.sock - portainer_data:/data portainer/portainer
修改为:
volumes: - /var/run/docker.sock:/var/run/docker.sock - portainer_data:/data
删除末尾多余的portainer/portainer,避免容器启动出现未知异常。
验证方法
如果修改后仍然异常,可执行以下命令排查网络连通性:
- 执行
docker inspect caddy和docker inspect portainer,确认两个容器的Networks字段中都存在caddy外部网络 - 进入Caddy容器内部执行
curl portainer:80,如果能正常返回Portainer的页面内容,说明容器间通信正常,反向代理配置已经生效。
内容的提问来源于stack exchange,提问作者modmoto
相关产品推荐
相关产品推荐

