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