我在Google App Engine中部署了一个Python 3应用程序,灵活的环境。
我正在使用psycopg2连接到托管在Google cloud SQL中的PostgreSQL实例。
我在从Google App Engine连接到PostgreSQL时遇到问题。
云 SQL 代理似乎初始化正常,但它绑定到0.0.0.0
Listening on 0.0.0.0:5432 for projectID:us-central1:my-db
尝试在127.0.0.1
或localhost
上连接不起作用。连接被拒绝。
应用程序引擎灵活环境在下面使用 docker(默认 IP 172.17.0.1
(来自 docker0 适配器(
使用该IP地址连接到Cloud SQL似乎如果有人决定更改它,它会咬我的屁股。
为什么会这样?
使用默认 docker0 适配器的 IP 地址是否是可行的长期解决方案?
除了切换到基于socket
的连接而不是tcp
方法之外,还有其他选择吗?
听起来像是在主机上运行 Cloud SQL 代理,同时尝试从容器内运行应用程序。它无法连接到代理的原因是127.0.0.1
引用 docker 的环回接口,而代理绑定到主机的接口。172.17.0.1
是容器可用于访问主机接口的地址。
一种替代方法是使用主机网络(https://docs.docker.com/network/host/
(,通过传入--network host
。这将导致主机的接口用于应用程序。
我已经从使用TCP作为连接方法切换到使用Unix套接字。
TCP 问题似乎是应用引擎灵活环境中的错误。但这是一个测试版功能(它在app.yaml中的名称为beta_settings(,我并不认为谷歌会修复它。
我也不想承诺将来某个时候可以更改的 IP 地址作为解决方法。