【问题标题】:Error in Django,docker,PostGIS: Is the server running locally and accepting connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?Django、docker、PostGIS 中的错误:服务器是否在本地运行并接受 Unix 域套接字“/var/run/postgresql/.s.PGSQL.5432”上的连接?
【发布时间】:2020-11-09 08:10:55
【问题描述】:

我有一个带有 PostGIS 数据库的 Django 项目,我需要对这个项目进行 dockerize。这就是我现在所拥有的。 在 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”或更改音量等),但对我没有任何效果。何能帮帮我?

【问题讨论】:

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

标签: django postgresql docker docker-compose postgis


【解决方案1】:

如评论中所述,您需要在 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 Could not connect to server

【讨论】:

    猜你喜欢
    • 2015-08-13
    • 1970-01-01
    • 2015-05-09
    • 2019-01-24
    • 1970-01-01
    • 2019-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多