当尝试使用 psql 连接到 postgres 时:sql -d DATABASE_NAME -U postgres -h PUBLIC_VM_IP
我收到以下错误:psql: error: could not connect to server: Operation timed out
我的配置是
gcr.io/google/postgresql12:latest
POSTGRES_DB=MY_DATABASE_NAME
和 POSTGRES_PASSWORD=MY_PASSWORD
allow_postgres
。allow_posgres
的防火墙规则,具有以下属性:如果我通过 ssh 进入实例并执行 docker ps
,我看到:gcr.io/stackdriver-agents/stackdriver-logging-agent:1.8.4
是唯一列出的正在运行的容器,这似乎不正确。我应该看到 postgres 容器运行的太对了吗?
如果是这样,我如何在控制台中更改我的配置以确保容器正在运行以及如何进一步调试连接问题?
答案 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 中找到的链接,它应该可以工作。
另外