![](/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.