【发布时间】:2020-01-04 10:45:31
【问题描述】:
我是一个相对的菜鸟 w.r.t。我正在处理的系统上的许多活动部件,所以请原谅我在某些地方缺乏理解。我的问题更多是关于寻求调试策略而不是寻求问题的解决方案,因为我目前处于空白状态。
当前设置
我在 EC2 实例上运行 Docker 容器。所有实例都在我公司的 VPC 中运行。我需要连接到驻留在本地工作站上的 Postgres 数据库。 Docker 容器使用 Dokku 自动启动和停止运行,这是一种开源 Heroku 替代方案,我终于想出了如何在 EC2 上进行设置。
我将在帖子中使用的一些变量:
-
DBSERVER:托管我们数据库的工作站的地址。 -
DOKKUSERVER:Dokku EC2实例地址。 -
APPCONTAINER:由 Dokku 开发的 Docker 容器,用于容纳我的应用程序。 -
APPNAME: Dokku 上的应用名称
什么有效
当我使用dokku enter APPNAME 进入APPCONTAINER 时,我可以ping DBSERVER 并得到回复:
(environment_name) [root@APPCONTAINER project]# ping DBSERVER
PING DBSERVER (DB_SERVER_IP) 56(84) bytes of data.
64 bytes from DBSERVER (DB_SERVER_IP): icmp_seq=1 ttl=117 time=95.9 ms
64 bytes from DBSERVER (DB_SERVER_IP): icmp_seq=2 ttl=117 time=96.2 ms
64 bytes from DBSERVER (DB_SERVER_IP): icmp_seq=3 ttl=117 time=95.7 ms
什么不起作用
但是,当我尝试使用pgcli 连接时,我发现我无法连接:
(environment_name) [root@APPCONTAINER project]# pgcli -h $DB_SERVER -p $DB_PORT -U $DB_USER -d $DB_NAME
could not send SSL negotiation packet: Resource temporarily unavailable
此外,在我的 Python 应用程序中,我们同时使用了 psycopg2 和 sqlalchemy(在代码库的不同部分),我发现我们无法连接到数据库。另一方面,从我的本地计算机(即我的笔记本电脑或其他本地工作站)的连接可以正常工作。
我的主要问题是 Python 应用程序需要通过 psycopg2 和 sqlalchemy 连接到数据库,但这不起作用。
当前假设
回顾一下,我在这里对如何调试空白,所以我要求调试策略(即我应该看什么),希望有一些关于如何调试的文档的指针。 (确切的命令 - 如果指向文档页面,我很乐意查找它们。)我想到但不知道如何查看的事情是:
- 调试 EC2 上的 Docker 容器和本地工作站之间的“连接”(在我的脑海中仍然是一个模糊的术语)?
我已经做过的事情是:
- 检查以确保环境变量设置正确
- 确保正确设置端口以使应用正常工作
- 进入 Dokku 正在运行的 Docker 容器并检查源代码是否正确。
还有其他我可能错过的调试策略吗?我很想对他们有所启发!
【问题讨论】:
标签: postgresql docker amazon-ec2 dokku