![](/img/trans.png)
[英]How to connect a django app to a dockerized postgres db, both from a dockerized django and non-dockerized django using same DATABASE_HOST
[英]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.