使用TCP

时间:2019-07-18 11:22:57

标签: docker google-app-engine google-cloud-platform google-cloud-sql

我在灵活的环境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.1localhost上进行连接不起作用。连接被拒绝。

起作用的是使用docker(应用引擎灵活的环境在下面使用docker)默认IP 172.17.0.1(来自docker0适配器)

如果有人决定更改IP地址,那么使用该IP地址连接到Cloud SQL似乎会让我大吃一惊。

为什么会这样?

使用默认docker0适配器的IP地址是否是可行的长期解决方案?

除了切换到基于socket的连接而不是tcp方法之外,还有其他选择吗?

2 个答案:

答案 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地址。