问题描述
我正在使用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连接到我的数据库时,这是一个附加的屏幕截图:
我检查了有关此错误的所有讨论,但无法弄清。
你能帮我吗?
谢谢。
解决方法
您是否尝试过通过环境变量将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