You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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容器是否在同一网络,且能正常通信:

    1. 查看网络内的容器:
      docker network inspect my-network | grep Name
      
      确保两个容器都在列表中。
    2. 进入cloudflared容器测试连通性:
      docker exec -it $(docker ps -q --filter "ancestor=cloudflare/cloudflared:latest") nc -zv qu-postgres 5432
      
      出现succeeded!说明网络连通正常,否则检查容器运行状态或网络配置。
  • 核对Cloudflare路由配置
    再次确认Cloudflare UI中的TCP路由:

    • 类型为TCP,无拼写错误
    • URL为qu-postgres:5432,容器名和端口正确
    • 子域名db、主域名my-domain配置无误

内容的提问来源于stack exchange,提问作者lrh09

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 14:22:37