Docker网络部署Cloudflare Tunnel与PostgreSQL,公网访问失败求助
PostgreSQL通过Cloudflare Tunnel TCP转发失败排查步骤
核心错误修正:连接端口误用
你当前用db.my-domain.com:5439连接是错误的——Cloudflare TCP隧道不会复用你本地容器的映射端口(5439),而是会为该TCP路由分配一个独立的公网端口(在Cloudflare UI的隧道路由列表中可以看到,通常是20000-30000区间的端口)。你需要用这个Cloudflare分配的端口来连接db.my-domain.com,而非本地的5439。
其他排查步骤
验证PostgreSQL监听范围
进入PostgreSQL容器,检查是否允许外部(包括同Docker网络内的cloudflared容器)访问:docker exec -it qu-postgres psql -U postgres -c "SHOW listen_addresses;"如果结果是
localhost,修改挂载目录/desktop/PGDbMount/data下的postgresql.conf,将listen_addresses = '*',然后重启容器:docker restart qu-postgres检查PostgreSQL权限配置
编辑挂载目录下的pg_hba.conf,添加允许Docker网络访问的规则(或临时允许所有来源测试):host all all 0.0.0.0/0 scram-sha-256重启PostgreSQL容器使配置生效。
确认容器网络连通性
检查cloudflared容器与PostgreSQL容器是否在同一网络,且能正常通信:- 查看网络内的容器:
确保两个容器都在列表中。docker network inspect my-network | grep Name - 进入cloudflared容器测试连通性:
出现docker exec -it $(docker ps -q --filter "ancestor=cloudflare/cloudflared:latest") nc -zv qu-postgres 5432succeeded!说明网络连通正常,否则检查容器运行状态或网络配置。
- 查看网络内的容器:
核对Cloudflare路由配置
再次确认Cloudflare UI中的TCP路由:- 类型为TCP,无拼写错误
- URL为
qu-postgres:5432,容器名和端口正确 - 子域名
db、主域名my-domain配置无误
内容的提问来源于stack exchange,提问作者lrh09
相关产品推荐
相关产品推荐

