簡體   English   中英

Django:在 Docker 上連接到 PostgreSQL 數據庫時出現 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 設置中

主機必須是主機名,因此是數據庫的地址。 在您的情況下,它應該設置為localhost127.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.

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