【问题标题】:How to debug: Unable to connect to database from inside a Docker container如何调试:无法从 Docker 容器内连接到数据库
【发布时间】: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 应用程序中,我们同时使用了 psycopg2sqlalchemy(在代码库的不同部分),我发现我们无法连接到数据库。另一方面,从我的本地计算机(即我的笔记本电脑或其他本地工作站)的连接可以正常工作。

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

当前假设

回顾一下,我在这里对如何调试空白,所以我要求调试策略(即我应该看什么),希望有一些关于如何调试的文档的指针。 (确切的命令 - 如果指向文档页面,我很乐意查找它们。)我想到但不知道如何查看的事情是:

  • 调试 EC2 上的 Docker 容器和本地工作站之间的“连接”(在我的脑海中仍然是一个模糊的术语)?

我已经做过的事情是:

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

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

【问题讨论】:

    标签: postgresql docker amazon-ec2 dokku


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2020-08-27
      • 2019-11-11
      • 2018-07-28
      • 2016-04-17
      • 1970-01-01
      • 2021-11-10
      • 2020-09-05
      • 2022-02-22
      • 1970-01-01
      相关资源
      最近更新 更多