如何在 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

我的配置是

  1. Google 云计算 vm 实例 e2-micro(2 个 vCPU,1 GB 内存)。
  2. 容器镜像设置为gcr.io/google/postgresql12:latest
  3. 我通过控制台在 VM 中设置了两个环境变量:a) POSTGRES_DB=MY_DATABASE_NAMEPOSTGRES_PASSWORD=MY_PASSWORD
  4. 我将网络标签设置为 allow_postgres
  5. 我有一个名为 allow_posgres 的防火墙规则,具有以下属性:

如果我通过 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,它应该可以工作。

另外