簡體   English   中英

無法從 Django 連接到外部 PostgreSQL 數據庫

[英]Cannot connect to external PostgreSQL database from dockerized Django

我正在運行 Django 應用程序 dockerized 並嘗試連接到位於具有公共 IP 的外部主機的 PostgreSQL 數據庫。

運行容器時, makemigrations命令會出現以下錯誤:

django.db.utils.OperationalError: could not connect to server: Connection refused
Is the server running on host "myhost" (89.xx.xx.102) and accepting
TCP/IP connections on port 5432?

但是,它在未 dockerized 時成功連接。

這里是docker-compose.yml

services:
  backend:
    build: .
    ports:
      - 65534:65534

和相應Dockerfile

FROM python:3.10 AS builder
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
COPY requirements.txt /app/
RUN pip install -r /app/requirements.txt
RUN pip install gunicorn


FROM builder
COPY ./ /app/
ENTRYPOINT [ "/app/entrypoint.sh" ]

entrypoint.sh

#!/bin/bash

python /app/manage.py collectstatic --no-input --clear
python /app/manage.py makemigrations
python /app/manage.py migrate --no-input
gunicorn --pythonpath /app/ -b 0.0.0.0:65534 app.wsgi:application

如何使 Django 應用程序連接到外部托管的 PostgresSQL 數據庫成為可能?

在您的終端中運行以下命令:

vim /etc/postgresql/14/main/postgresql.conf #14 is the version of postgres.

取消注釋並編輯 listen_addresses 屬性以開始偵聽以開始偵聽所有可用的 IP 地址。

listen_addresses = '*'

Append 文件底部的新連接策略(模式代表 [CONNECTION_TYPE][DATABASE][USER] [ADDRESS][METHOD])。

host all all 0.0.0.0/0 md5

我們允許所有用戶(全部)使用任何 IPv4 地址(0.0.0.0/0)使用 MD5 加密密碼進行身份驗證(md5)的 TCP/IP 連接(主機)到所有數據庫(全部)。

現在是時候重新啟動您的 PostgreSQL 服務以加載您的配置更改了。

systemctl restart postgresql

並確保您的系統正在偵聽為 PostgreSQL 保留的 5432 端口。

ss -nlt | grep 5432

通過遠程主機連接PostgreSQL數據庫:

您的 PostgreSQL 服務器現在正在運行並偵聽外部請求。 現在是時候通過遠程主機連接到您的數據庫了。

通過命令行工具連接:

您現在可以使用以下命令模式連接到遠程數據庫:

psql -h [ip address] -p [port] -d [database] -U [username]

現在讓我們連接到我們托管的遠程 PostgreSQL 數據庫。

psql -h 5.199.162.56 -p 5432 -d test_erp -U postgres

要仔細檢查您的連接詳細信息,請使用\conninfo命令。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM