设置如下:
1.我有一个django容器、postgresql容器和一个运行在ec2示例上的nginx代理
2.我有另一个postgresql容器在ubuntu服务器上本地运行
3.我正在尝试将django服务器连接到本地postgresql服务器以读取数据
配置:
1.对于django,我有远程数据库的配置
2.下面是配置。所有变量都在一个.env文件中设置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'HOST': os.environ.get('DB_HOST'),
'NAME': os.environ.get('DB_NAME'),
'USER': os.environ.get('DB_USER'),
'PASSWORD': os.environ.get('DB_PASS')
},
'nlp_data': {
'ENGINE': 'django.db.backends.postgresql',
'HOST': os.environ.get('NLP_DB_HOST'),
'NAME': os.environ.get('NLP_DB_NAME'),
'USER': os.environ.get('NLP_DB_USER'),
'PASSWORD': os.environ.get('NLP_DB_PASS')
}
}
问题:
1.我的本地服务器上的postgresql容器...这个数据库的主机是什么?是ubuntu服务器的公共IP吗?不确定
2.有没有更好的方法来调试这些网络问题?我一直收到超时错误(假设这是因为我的Django容器无法到达我的本地DB服务器)
我试过使用本地Ubuntu服务器的公共IP,但没有解决任何问题,也没有告诉我任何新的东西。
1条答案
按热度按时间umuewwlo1#
听起来像是防火墙和/或容器网络的问题,你应该能够从django主机连接到postgres主机,并且你需要确保postgres主机将postgres流量转发到容器。
因为你没有指明你是如何运行容器的,我假设你在两个容器上都使用docker,而且,因为你没有指明你在ec2示例上运行的是什么操作系统,我假设你在linux上运行。
使用Docker,您可以看到postgres主机正在转发流量,如下所示:
并查找如下行:
13小时前上传4秒0. 0. 0. 0:5432-〉5432/tcp帖子发布时间:13. 1
0.0.0.0:5432->5432/tcp
部分表示postgres主机正在将所有接口上的端口5432(postgres默认值)流量转发到容器。你需要做的另一件事是验证你是否可以从运行的django容器连接到postgres主机,你可以使用postgres CLI工具来完成:
这个工具会提示你输入密码,你也可以在django主机上运行psql命令,你可能需要安装postgres客户端来实现这个功能,如果你使用ubuntu/debian,你可以在
sudo apt install postgresql-client
上安装。外部客户端 * 的数据库主机 * 将是运行容器的服务器的主机名/IP。
如果psql命令超时,那么我建议您查看postgres主机服务器的防火墙设置,并确保django容器主机可以访问互联网。