本地通过Cloud Auth Proxy连接Cloud SQL遇connection reset by peer问题
解决方向
排查本地网络中转/代理
172.30.0.0/16是Docker默认网桥的CIDR段,这个陌生IP大概率来自本地运行的Docker容器、VPN或第三方代理软件(如Clash、Charles),这类工具可能拦截Cloud SQL Proxy的出站连接导致重置。- 临时关闭所有VPN、代理软件,停止无关Docker容器后,重启Cloud SQL Proxy重试。
- 检查环境变量是否配置了代理:执行
echo $HTTP_PROXY $HTTPS_PROXY,若有输出则临时取消(unset HTTP_PROXY HTTPS_PROXY)后重启Proxy。
验证Cloud SQL Proxy的连接参数
- 若之前使用公网连接正常,可强制Proxy使用公网IP连接,去掉
--private-ip参数,添加--public-ip重新启动:cloud_sql_proxy -instances=gcloud-xx-yz:europe-west3:mydb=tcp:5432 --public-ip - 确认Proxy启动日志显示
Listening on 127.0.0.1:5432,确保绑定的是本地回环地址而非其他网卡。
- 若之前使用公网连接正常,可强制Proxy使用公网IP连接,去掉
检查Django数据库配置与连通性
- 确认
settings.py中的数据库配置无误:DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'your_db_name', 'USER': 'your_db_user', 'PASSWORD': 'your_db_password', 'HOST': '127.0.0.1', 'PORT': '5432', } } - 排查是否有环境变量覆盖配置:执行
printenv | grep DATABASE,若存在DATABASE_URL等变量,可能与settings中的配置冲突,临时取消后重试。 - 用psql直接测试Proxy连通性:
如果psql能正常连接,说明问题出在Django应用侧;若同样报错,继续排查网络或Proxy配置。psql -h 127.0.0.1 -p 5432 -U your_db_user -d your_db_name
- 确认
检查Cloud SQL实例的连接限制与日志
- 查看实例当前连接数是否达上限:在Cloud Shell中执行
SELECT count(*) FROM pg_stat_activity;,对比实例的最大连接数(Postgres 14的最大连接数由实例内存决定,可在GCP控制台实例详情中查看),若接近上限,关闭闲置连接或升级实例配置。 - 查看Cloud SQL的连接审计日志:在GCP控制台进入Cloud SQL实例 -> 日志 -> 连接日志,排查是否有拒绝连接的记录,确认是否存在IP拦截规则异常。
- 查看实例当前连接数是否达上限:在Cloud Shell中执行
排查本地防火墙/安全软件
本地防火墙(如Windows Defender、macOS防火墙)或杀毒软件可能拦截Proxy的出站连接(到Cloud SQL的3307端口),或拦截Django与本地回环地址的通信:- 临时关闭防火墙/杀毒软件后测试连接,若恢复正常,添加允许规则:允许Cloud SQL Proxy程序出站到任意IP的3307端口,允许Python程序访问127.0.0.1:5432。
内容的提问来源于stack exchange,提问作者bhordupur
相关产品推荐
相关产品推荐

