使用 TCP 的 App Engine PostgreSQL 连接错误
App Engine PostgreSQL connection error using TCP
我在 Google App Engine 灵活环境中部署了一个 Python 3 应用程序。
我正在使用 psycopg2 连接到托管在 Google 云 SQL 中的 PostgreSQL 实例 SQL。
我在从 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(App Engine 柔性环境在下方使用 docker)默认 IP 172.17.0.1
(来自 docker0 适配器)
使用该 IP 地址连接到云 SQL 如果有人决定更改它,这似乎会咬我的屁股。
为什么会这样?
使用默认的 docker0 适配器的 IP 地址是一个可行的长期解决方案吗?
除了切换到基于 socket
的连接而不是 tcp
方法之外,还有其他选择吗?
听起来您正在 运行 在您的主机上使用云 SQL 代理,而您正试图从容器内 运行 您的应用程序。它无法连接到代理的原因是因为 127.0.0.1
指的是 docker 的环回接口,而代理绑定到主机的接口。 172.17.0.1
是容器可以用来到达主机接口的地址。
一种替代方法是 use host networking (https://docs.docker.com/network/host/
),方法是传入 --network host
。这将使主机的接口用于应用程序。
我已经从使用 TCP 作为连接方法切换到使用 Unix 套接字。
TCP 问题似乎是 App Engine 柔性环境中的错误。但这是一个测试版功能(它在 app.yaml 中的名称 beta_settings 下),我不会等待 Google 修复它。
我也不想承诺将来某个时候可能会更改的 IP 地址作为解决方法。
我在 Google App Engine 灵活环境中部署了一个 Python 3 应用程序。
我正在使用 psycopg2 连接到托管在 Google 云 SQL 中的 PostgreSQL 实例 SQL。
我在从 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(App Engine 柔性环境在下方使用 docker)默认 IP 172.17.0.1
(来自 docker0 适配器)
使用该 IP 地址连接到云 SQL 如果有人决定更改它,这似乎会咬我的屁股。
为什么会这样?
使用默认的 docker0 适配器的 IP 地址是一个可行的长期解决方案吗?
除了切换到基于 socket
的连接而不是 tcp
方法之外,还有其他选择吗?
听起来您正在 运行 在您的主机上使用云 SQL 代理,而您正试图从容器内 运行 您的应用程序。它无法连接到代理的原因是因为 127.0.0.1
指的是 docker 的环回接口,而代理绑定到主机的接口。 172.17.0.1
是容器可以用来到达主机接口的地址。
一种替代方法是 use host networking (https://docs.docker.com/network/host/
),方法是传入 --network host
。这将使主机的接口用于应用程序。
我已经从使用 TCP 作为连接方法切换到使用 Unix 套接字。
TCP 问题似乎是 App Engine 柔性环境中的错误。但这是一个测试版功能(它在 app.yaml 中的名称 beta_settings 下),我不会等待 Google 修复它。
我也不想承诺将来某个时候可能会更改的 IP 地址作为解决方法。