如何在 google 云计算 VM 上调试 postgres 连接问题
How to Debug postgres connection issues on google cloud compute VM
当尝试使用 psql 连接到 postgres 时:sql -d DATABASE_NAME -U postgres -h PUBLIC_VM_IP
我收到以下错误:psql: error: could not connect to server: Operation timed out
我的配置是
- Google 云计算 vm 实例 e2-micro(2 个 vCPU,1 GB 内存)。
- 容器镜像设置为
gcr.io/google/postgresql12:latest
- 我通过控制台在 VM 中设置了两个环境变量:a)
POSTGRES_DB=MY_DATABASE_NAME
和 POSTGRES_PASSWORD=MY_PASSWORD
- 我将网络标签设置为
allow_postgres
。
- 我有一个名为
allow_posgres
的防火墙规则,具有以下属性:
- 日志:关闭
- 网络:默认
- 优先级:1000
- 方向:入口
- 比赛动作:允许
- 目标:目标标签 allow-postgres
- 源过滤器:IP 范围:0.0.0.0/0 和我计算机的 IP
- 协议和端口:tcp:5432
- 执行:已启用
- 见解:None
如果我通过 ssh 进入实例并执行 docker ps
,我会看到:gcr.io/stackdriver-agents/stackdriver-logging-agent:1.8.4
是唯一列出的 运行 容器,这似乎不对。我应该看到 postgres 容器 运行 对吧?
如果是这样,我该如何更改控制台中的配置以确保容器 运行 以及如何进一步调试连接问题?
当我尝试 运行 您指定的图像时,我总是遇到错误(在我登录到此 VM 后看到):
#########################[ Error ]#########################
# The startup agent encountered errors. Your container #
# was not started. To inspect the agent's logs use #
# 'sudo journalctl -u konlet-startup' command. #
###########################################################
journalctl
显示的日志也没有指出问题所在。
所以 - 我去市场寻找 postgresql 12。在我点击 Show Pull Command
按钮后,我得到了这张图片的 link:marketplace.gcr.io/google/postgresql12:latest
.
我创建了一个新的 VM(默认设置)并使用上图 url 部署了一个容器。我分配了一个适当的网络标记以允许在 5432 端口上进行连接,然后单击 create
按钮并创建了一个防火墙规则,就像您在问题中描述的那样。
在我登录到一个新的虚拟机后,我 运行 docker ps
看到容器是 运行:
wb@pg1 ~ $ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
37b651f9c383 marketplace.gcr.io/google/postgresql12:latest "docker-entrypoint.s…" 28 seconds ago Up 19 seconds klt-pg1-maok
之后我尝试从外部连接:
wb@cloudshell:~$ psql -h xx.xxx.xxx.xxx -U postgres
psql (13.3 (Debian 13.3-1.pgdg100+1), server 12.6 (Debian 12.6-1.pgdg90+1))
Type "help" for help.
postgres=#
我能够列出所有数据库:
postgres=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+------------+------------+-----------------------
postgres | postgres | UTF8 | en_US.utf8 | en_US.utf8 |
template0 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres +
| | | | | postgres=CTc/postgres
(3 rows)
如您所见,我没有遇到任何问题,因此您也可以尝试这样做。如您所见,我没有配置任何变量或数据库密码,因为它是用于测试目的。
使用我在 Marketplace 中找到的 link,它应该可以工作。
另外
当尝试使用 psql 连接到 postgres 时:sql -d DATABASE_NAME -U postgres -h PUBLIC_VM_IP
我收到以下错误:psql: error: could not connect to server: Operation timed out
我的配置是
- Google 云计算 vm 实例 e2-micro(2 个 vCPU,1 GB 内存)。
- 容器镜像设置为
gcr.io/google/postgresql12:latest
- 我通过控制台在 VM 中设置了两个环境变量:a)
POSTGRES_DB=MY_DATABASE_NAME
和POSTGRES_PASSWORD=MY_PASSWORD
- 我将网络标签设置为
allow_postgres
。 - 我有一个名为
allow_posgres
的防火墙规则,具有以下属性:
- 日志:关闭
- 网络:默认
- 优先级:1000
- 方向:入口
- 比赛动作:允许
- 目标:目标标签 allow-postgres
- 源过滤器:IP 范围:0.0.0.0/0 和我计算机的 IP
- 协议和端口:tcp:5432
- 执行:已启用
- 见解:None
如果我通过 ssh 进入实例并执行 docker ps
,我会看到:gcr.io/stackdriver-agents/stackdriver-logging-agent:1.8.4
是唯一列出的 运行 容器,这似乎不对。我应该看到 postgres 容器 运行 对吧?
如果是这样,我该如何更改控制台中的配置以确保容器 运行 以及如何进一步调试连接问题?
当我尝试 运行 您指定的图像时,我总是遇到错误(在我登录到此 VM 后看到):
#########################[ Error ]#########################
# The startup agent encountered errors. Your container #
# was not started. To inspect the agent's logs use #
# 'sudo journalctl -u konlet-startup' command. #
###########################################################
journalctl
显示的日志也没有指出问题所在。
所以 - 我去市场寻找 postgresql 12。在我点击 Show Pull Command
按钮后,我得到了这张图片的 link:marketplace.gcr.io/google/postgresql12:latest
.
我创建了一个新的 VM(默认设置)并使用上图 url 部署了一个容器。我分配了一个适当的网络标记以允许在 5432 端口上进行连接,然后单击 create
按钮并创建了一个防火墙规则,就像您在问题中描述的那样。
在我登录到一个新的虚拟机后,我 运行 docker ps
看到容器是 运行:
wb@pg1 ~ $ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
37b651f9c383 marketplace.gcr.io/google/postgresql12:latest "docker-entrypoint.s…" 28 seconds ago Up 19 seconds klt-pg1-maok
之后我尝试从外部连接:
wb@cloudshell:~$ psql -h xx.xxx.xxx.xxx -U postgres
psql (13.3 (Debian 13.3-1.pgdg100+1), server 12.6 (Debian 12.6-1.pgdg90+1))
Type "help" for help.
postgres=#
我能够列出所有数据库:
postgres=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+------------+------------+-----------------------
postgres | postgres | UTF8 | en_US.utf8 | en_US.utf8 |
template0 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres +
| | | | | postgres=CTc/postgres
(3 rows)
如您所见,我没有遇到任何问题,因此您也可以尝试这样做。如您所见,我没有配置任何变量或数据库密码,因为它是用于测试目的。
使用我在 Marketplace 中找到的 link,它应该可以工作。
另外