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

如何通过Cloudflare Tunnel远程访问树莓派Docker中的PostgreSQL数据库?

解决Cloudflare Tunnel远程连接PostgreSQL(TimescaleDB)超时问题

核心问题定位

你当前的错误在于Python代码直接连接db.mydomain.com:5432,但Cloudflare Access TCP隧道的工作逻辑是:本地客户端的cloudflared会将localhost:5432的请求转发到隧道后端的树莓派PostgreSQL服务,而非直接通过域名的5432端口连接。

具体解决步骤

1. 修正Python连接地址

将连接字符串改为指向本地localhost的5432端口,因为cloudflared已经完成了本地端口到隧道的转发:

import psycopg2
# 连接本地被cloudflared转发的端口
connection = psycopg2.connect('postgres://user:password@localhost:5432/mydbname')

2. 验证cloudflared客户端运行状态

执行cloudflared access tcp --hostname db.mydomain.com --url localhost:5432后,检查终端输出:

  • 确认出现类似Connected to tunnel ...的成功提示
  • 如果报错,检查:
    • 隧道的hostname是否与命令中--hostname参数完全一致
    • 树莓派上的隧道后端配置是否正确指向192.168.1.***:5432

3. 确认Cloudflare隧道配置类型

在Cloudflare Dashboard的隧道服务配置中,确保该隧道是TCP协议类型,而非HTTP/HTTPS:

  • 因为PostgreSQL使用原生TCP通信,HTTP/HTTPS隧道无法适配
  • 检查隧道的端口设置为5432,后端目标为192.168.1.***:5432

4. 确保PostgreSQL容器允许外部连接

进入树莓派的PostgreSQL(TimescaleDB)容器,修改配置:

  • 修改postgresql.conf,设置listen_addresses = '*'(允许所有IP访问)
  • 修改pg_hba.conf,添加允许外部连接的规则:
    host    all             all             0.0.0.0/0            scram-sha-256
    
  • 重启容器使配置生效

5. 排查本地Windows防火墙

  • 临时关闭Windows防火墙测试连接,若能成功则添加规则:
    • 允许cloudflared.exe的网络访问权限
    • 允许Python程序访问本地5432端口

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 00:50:25