![](/img/trans.png)
[英]Connecting Django to Docker Postgres instance raising django.db.utils.OperationalError
[英]Django: OperationalError when connecting to PostgreSQL DB on Docker
當使用運行 Django 時,我在將 Django 與安裝在 docker 中的 PostgreSQL 連接時遇到問題
python manage.py runserver
它返回以下錯誤
OperationalError: could not translate host name "db" to address: Unknown host
設置.py:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'postgres',
'USER': 'postgres',
'PASSWORD': 'trytofindme',
'HOST': 'db',
'PORT': '5432',
}
}
Dockerfile:
# pull official base image
FROM python:3.6.4-alpine
# set work directory
WORKDIR /usr/src/app
# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
# install wkhtmltopdf dependencies
RUN wget https://s3.amazonaws.com/shopify-managemant-app/wkhtmltopdf-0.9.9-static-amd64.tar.bz2
RUN tar xvjf wkhtmltopdf-0.9.9-static-amd64.tar.bz2
RUN mv wkhtmltopdf-amd64 /usr/local/bin/wkhtmltopdf
RUN chmod +x /usr/local/bin/wkhtmltopdf
# install python dependencies
RUN pip install --upgrade pip
COPY ./requirements.txt /usr/src/app/requirements.txt
RUN apk --update add libxml2-dev libxslt-dev libffi-dev gcc musl-dev libgcc openssl-dev curl
RUN apk add jpeg-dev zlib-dev freetype-dev lcms2-dev openjpeg-dev tiff-dev tk-dev tcl-dev
RUN \
apk add --no-cache postgresql-libs && \
apk add --no-cache --virtual .build-deps gcc musl-dev postgresql-dev && \
python3 -m pip install -r requirements.txt --no-cache-dir && \
apk --purge del .build-deps
# copy project
COPY . /usr/src/app/
碼頭工人組成:
version: '3.7'
services:
db:
image: postgres:13.0
restart: always
environment:
POSTGRES_PASSWORD: trytofindme
ports:
- 15432:5432
adminer:
image: adminer
restart: always
ports:
- 8020:8080
我在我的代碼中找不到錯誤。 是否有任何變體可以連接 PostgreSQL 和 Django 而不會失去保護?
我用了:
docker-compose up -d --build
進而:
docker-compose up
Docker 容器開始工作並說 db 已准備好接受連接。 所以我認為,這個問題出在我的 Django 設置中
主機必須是主機名,因此是數據庫的地址。 在您的情況下,它應該設置為localhost
或127.0.0.1
。 Django 不知道您的 Docker 服務的邏輯名稱。
您docker-compose.yaml
還指定了與您在 Django 配置中放置的主機端口不同的主機端口(請參閱文檔):
指定兩個端口 (HOST:CONTAINER),或僅指定容器端口(選擇臨時主機端口)。
您應該將 Django 配置中的端口更改為15432
,或者更好地更改端口映射如下
...
services:
db:
...
ports:
- "5432:5432"
...
最好使用像5432
這樣的標准端口,因為它可以更容易地從主機上的開放端口識別主機服務/進程。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.