nginx 将django(ec2上的容器)连接到远程服务器上运行的postgresql数据库(容器)时出错

2q5ifsrm  于 2023-03-17  发布在  Nginx
关注(0)|答案(1)|浏览(145)

设置如下:

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,但没有解决任何问题,也没有告诉我任何新的东西。

umuewwlo

umuewwlo1#

听起来像是防火墙和/或容器网络的问题,你应该能够从django主机连接到postgres主机,并且你需要确保postgres主机将postgres流量转发到容器。
因为你没有指明你是如何运行容器的,我假设你在两个容器上都使用docker,而且,因为你没有指明你在ec2示例上运行的是什么操作系统,我假设你在linux上运行。
使用Docker,您可以看到postgres主机正在转发流量,如下所示:

postgres@postgres-host:~$ docker ps

并查找如下行:
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@django-host:~$ docker exec -ti <django-container-name> psql -h <postgres-hostname> -U <username>

这个工具会提示你输入密码,你也可以在django主机上运行psql命令,你可能需要安装postgres客户端来实现这个功能,如果你使用ubuntu/debian,你可以在sudo apt install postgresql-client上安装。
外部客户端 * 的数据库主机 * 将是运行容器的服务器的主机名/IP。
如果psql命令超时,那么我建议您查看postgres主机服务器的防火墙设置,并确保django容器主机可以访问互联网。

相关问题