Django,docker,PostGIS中的错误:服务器是否在本地运行并接受Unix域套接字上的连接/var/run/



我有一个带有PostGIS数据库的Django项目,我需要对这个项目进行码头化。这就是我现在所拥有的。在settings.py文件中:

DATABASES = {
'default': {
'ENGINE': 'django.contrib.gis.db.backends.postgis',
'NAME': os.environ.get('pgdatabase'),
'USER': os.environ.get('pguser'),
'PASSWORD': os.environ.get('pgpassword'),
'HOST': os.environ.get('pghostname'),
'PORT': '5432',
}}

Dockerfile:

FROM python:2.7
WORKDIR /orion-amr/
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
COPY ./requirements.txt ./requirements.txt
RUN pip install -r requirements.txt
RUN apt-get update
RUN apt-get install -y binutils libproj-dev gdal-bin
COPY . /orion-amr/

docker-compose.yml:

version: '3'
services:
db:
image: kartoza/postgis:12.0
environment:
- POSTGRES_DB=amr_or
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=root
ports:
- "5432:5432"
web:
build: ./
command: bash -c "python manage.py migrate && python manage.py collectstatic --noinput --i rest_framework &&  gunicorn orion-amr.wsgi:application --bind 0.0.0.0:8000 --workers=2"
ports:
- "8000:8000"
env_file:
- ./.env.dev
depends_on:
- db

.env.dev:

SECRET_KEY=z)mf(y#w7-_8y1)0(v*n@w@lzf)!0=g_rj5$%1w6g-t!7nbk05
PGDATABASE=amr_or
PGPASSWORD=root
PGHOSTNAME=db
PGUSER=postgres
DEBUG=

现在数据库服务可以正常工作,但web服务会引发以下错误:

django.db.utils.OperationalError: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

我尝试了很多解决方案(增加"睡眠10"或改变音量等(,但都不起作用。请问何能帮我?

如注释中所述,您需要在ENV中使用大写。

'USER': os.environ.get('postgres'),
'PASSWORD': os.environ.get('PGPASSWORD'),
'HOST': os.environ.get('PGHOSTNAME'),

或者,另一种选择是使用用于调试目的的硬编码值来验证连接。

'USER': "postgres"
'PASSWORD':"root",
'HOST': "db",

您在尝试连接到数据库时出错,例如用户名、密码或数据库名称。检查它们是否是postgres要求您连接的,并且这是您想要访问的db_name。

django.db.utils.OperationalError无法连接到服务器

最新更新