如何在谷歌云计算 VM 上调试 postgres 连接问题

时间:2021-06-13 06:22:04

标签: postgresql google-compute-engine

当尝试使用 psql 连接到 postgres 时:sql -d DATABASE_NAME -U postgres -h PUBLIC_VM_IP

我收到以下错误:psql: error: could not connect to server: Operation timed out

我的配置是

  1. Google cloudcompute 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 的防火墙规则,具有以下属性:
  • 日志:关闭
  • 网络:默认
  • 优先级:1000
  • 方向:入口
  • 匹配操作:允许
  • 目标:目标标签 allow-postgres
  • 源过滤器:IP 范围:0.0.0.0/0 和我电脑的 IP
  • 协议和端口:tcp:5432
  • 强制执行:已启用
  • 见解:无

如果我通过 ssh 进入实例并执行 docker ps,我看到:gcr.io/stackdriver-agents/stackdriver-logging-agent:1.8.4 是唯一列出的正在运行的容器,这似乎不正确。我应该看到 postgres 容器运行的太对了吗?

如果是这样,我如何在控制台中更改我的配置以确保容器正在运行以及如何进一步调试连接问题?

1 个答案:

答案 0 :(得分:1)

当我尝试运行您指定的映像时,我总是遇到错误(在我登录到此 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 按钮后,我得到了一个指向此图片的链接: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 中找到的链接,它应该可以工作。

另外