Django、docker、PostGIS中出错:服务器是否在本地运行并接受Unix域套接字上的连接/var/run/postgresql/.s.PGSQL.5432“;?

Django、docker、PostGIS中出错:服务器是否在本地运行并接受Unix域套接字上的连接/var/run/postgresql/.s.PGSQL.5432“;?,django,postgresql,docker,docker-compose,postgis,Django,Postgresql,Docker,Docker Compose,Postgis,我有一个带有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.env

我有一个带有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=
现在db服务工作正常,但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_名称


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

    'USER': os.environ.get('postgres'),
    'PASSWORD': os.environ.get('PGPASSWORD'),
    'HOST': os.environ.get('PGHOSTNAME'),
或者,另一个选项是使用硬编码值进行调试,以验证连接

    'USER': "postgres"
    'PASSWORD':"root",
    'HOST': "db",
您尝试连接到数据库时出错,例如用户名、密码或数据库名。检查它们是否是postgres要求您连接的内容,以及您希望访问的db_名称


您的环境变量为大写,但在设置中使用小写。您的环境变量为大写,但在设置中使用小写