无法连接到我的postgreSQL数据库

问题描述

我正在使用docker,并且已经开始一个新项目。 我在Django中有一个后端,我想使用一个postgresql数据库

我无法使用Django或PGAdmin连接到我的数据库This is what I Got when I try to connect to my database (with Django or with PGAdmin

他是我的docker-compose文件的一部分

services:
db:
    image: postgres
    container_name: db_wishlist
    restart: always
    volumes:
    - ./postgres-data-wishlist:/var/lib/postgresql/data
    env_file:
        - env/base/db.env
        - env/dev/db.env
    ports:
    - "5432:5432"
    networks:
        wishlist:
            aliases:
                - db

pgadmin:
    image: dpage/pgadmin4
    container_name: pgadmin 
    depends_on:
        - db
    ports:
        - "5051:80"
    env_file:
        - env/base/db.env
        - env/dev/db.env
    environment:
        PGADMIN_DEFAULT_EMAIL: [email protected]
        PGADMIN_DEFAULT_PASSWORD: root
    restart: always
    networks:
        wishlist:
            aliases:
                - pgadmin

api:
    container_name: backend
    build:
        context: ..
        dockerfile: Docker/Dockerfiles/Django
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
        - ../Django/:/api
    ports:
        - "8000:8000"
    env_file:
        - env/base/db.env
        - env/dev/db.env
    depends_on:
    - db
    links:
    - db:db
    networks:
        wishlist:
            aliases:
                - api
@H_502_9@

这是我的db.env:

POSTGRES_DB=wishlist
POSTGRES_USER=maxdal1
POSTGRES_PASSWORD=demo
@H_502_9@

这是我在Django中的settings.py:

DATABASES = {
'default': {
    'ENGINE': 'django.db.backends.postgresql','NAME': 'wishlist','USER': 'maxdal1','PASSWORD': 'demo','HOST': 'db','PORT': 5432,}
@H_502_9@

}

当我尝试使用PGAdmin连接到我的数据库时,这是一个附加的屏幕截图:

Error with PGAdmin

我检查了有关此错误的所有讨论,但无法弄清。

你能帮我吗?

谢谢。

解决方法

您是否尝试过通过环境变量将db用户传递给postgres容器?

int index2 = firstn.Next(lastNames.Length);
,

以下设置适用于我:

docker-compose.yaml

services:

  postgres:
    image: postgres:10-alpine
    volumes:
      - ./pgdata:/var/lib/postgresql/data/pgdata
    environment:
      - PGDATA=/var/lib/postgresql/data/pgdata
      - POSTGRES_DB=django_db
      - POSTGRES_USER=XXX
      - POSTGRES_PASSWORD=XXX
    ports:
      - 127.0.0.1:5432:5432
    networks:
      - backend

  django:
    build:
      context: .
      dockerfile: Dockerfile
    environment:
      - POSTGRES_HOST=postgres
      - POSTGRES_DB=django_db
      - POSTGRES_USER=XXX
      - POSTGRES_PASSWORD=XXX
    volumes:
      - ./staticfiles:/staticfiles
      - ./media:/media
    ports:
      - 8000:8000
    networks:
      - backend
      - frontend

settings.py

POSTGRES_HOST = os.environ.get('POSTGRES_HOST','localhost')
POSTGRES_DB = os.environ.get('POSTGRES_DB','django_db')
POSTGRES_USER = os.environ.get('POSTGRES_USER','XXX')
POSTGRES_PW = os.environ.get('POSTGRES_PASSWORD','XXX')

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql','NAME': POSTGRES_DB,'HOST': POSTGRES_HOST,'USER': POSTGRES_USER,'PASSWORD': POSTGRES_PW,'CONN_MAX_AGE': 120,}
}

django应用程序的Dockerfile指定以下环境变量:

ENV POSTGRES_DB=$POSTGRES_DB
ENV POSTGRES_HOST=$POSTGRES_HOST
ENV POSTGRES_USER=$POSTGRES_USER
ENV POSTGRES_PASSWORD=$POSTGRES_PASSWORD

您可以这样运行:

$ docker-compose up

或仅通过docker运行postgres并在本地运行Django:

$ docker-compose up postgres

在另一个终端中:

$ ./manage.py runserver