django.db.utils.OperationalError: FATAL: 用户"postgres"的密码身份验证失败 - django



我正在尝试使用docker-compose与django和postgres的应用程序,但我得到一个错误与"NAME">

这是我的settings.py

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'postgres',
'USER': 'postgres',
'PASSWORD': 'postgres',
'HOST': 'db',
'PORT': 5432,
}
}

这是我的docker-compose

version: "3.9"
services:
db:
restart: always
image: postgres:latest
ports:
- "5432:5432"
volumes:
- ./data/db:/var/lib/postgresql/data
environment:
- POSTGRES_DB=postgres
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
web:
restart: always
build: ./backend
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/usr/src/app
ports:
- "8000:8000"
depends_on:
- db

django.db.utils。OperationalError: FATAL:密码鉴权用户"postgresql"失败

谢谢你的帮助

我的代码中有很多地方是错误的。经过6小时的调试。

首先,我更改了所有的docker-compose。yml

version: "3.9"
services:
db:
image: postgres
volumes:
- ./data/db:/var/lib/postgresql/data
web:
build: ./backend
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/usr/src/app
ports:
- "8000:8000"
depends_on:
- db

在我的settings.py中我做了:

import environ
import os
env = environ.Env(
# set casting, default value
DEBUG=(bool, False)
)
# Set the project base directory
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# Take environment variables from .env file
environ.Env.read_env(os.path.join(BASE_DIR, '.env'))
# False if not in os.environ because of casting above
DEBUG = env('DEBUG')
# Raises Django's ImproperlyConfigured
# exception if SECRET_KEY not in os.environ
SECRET_KEY = env('SECRET_KEY')
# Parse database connection url strings
# like psql://user:pass@127.0.0.1:8458/db
DATABASES = {
# read os.environ['DATABASE_URL'] and raises
# ImproperlyConfigured exception if not found
#
# The db() method is an alias for db_url().
'default': env.db(),

}

然后创建。env

DEBUG=on
SECRET_KEY=xxx
DATABASE_URL=psql://postgres:123@db:5432/postgres

然后使用

进入docker
docker ps -a
docker exec -it <container_id> bash
psql postgres postgres
password postgres
123
123

我迁移了我的数据库

docker-compose exec web python manage.py makemigrations
docker-compose exec web python manage.py migrate