如何调试:无法从Docker容器内部连接到数据库

时间:2019-08-31 15:24:06

标签: postgresql docker amazon-ec2 dokku

我是相对的菜鸟。我正在使用的系统上的许多活动部件,因此请对我缺乏理解,请原谅。我在这里的问题更多是关于寻求调试策略,而不是寻求解决问题的方法,因为我目前正在空白。

当前设置

我正在EC2实例上运行Docker容器。所有实例都在我公司的VPC中运行。我需要连接到内部部署在工作站上的Postgres数据库。 Docker容器使用Dokku(一种开源的Heroku替代产品)自动启动和关闭,我终于弄清楚了如何在EC2上进行设置。

我将在帖子中使用一些变量:

  • DBSERVER:托管我们的数据库的工作站的地址。
  • DOKKUSERVER:Dokku EC2实例的地址。
  • APPCONTAINER:由Dokku推出的Docker容器,用于存放我的应用。
  • APPNAME:Dokku上的应用程序名称

什么有效

当我用APPCONTAINER进入dokku enter APPNAME时,我可以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应用程序中,我们同时使用了psycopg2sqlalchemy(在代码库的不同部分),我发现我们无法连接到数据库。另一方面,与我的本地计算机(即我的笔记本电脑或其他本地工作站)的连接可以正常工作。

我的主要问题是Python应用程序需要通过psycopg2sqlalchemy到数据库的连接,但这不起作用。

当前假设

总而言之,我在这里就如何调试没有什么用,所以我在寻求调试策略(即我应该看什么),并希望有一些指向如何调试文档的指针。 (确切的命令-如果指向文档页面,我很乐意查找它们。)我已经想到但不确定如何看待的事情是:

  • 调试EC2上的Docker容器与本地工作站之间的“连接”(在我看来仍然是个模糊的术语)吗?

我已经完成的事情是:

  • 检查以确保正确设置环境变量
  • 确保正确设置端口以使应用正常运行
  • 进入Dokku正在运行的Docker容器并检查源代码是否正确。

还有其他我可能错过的调试策略吗?我希望对他们有所启发!

1 个答案:

答案 0 :(得分:0)

我相信on twitter得到了答案,但是问题是用户没有在其AWS账户上创建正确的安全组规则以允许从服务器到数据库的流量。