django ошибка подключения к бд в docker
я сделал небольшую api на drf, но при запуске возникает ошибка
FROM python:3.11.9-alpine
ENV PYTHONUNBUFFERED=1
ENV PYTHONDONTWRITEBYTECODE=1
# Устанавливаем обновления и необходимые модули
RUN apk update && apk add libpq
RUN apk add --virtual .build-deps gcc python3-dev musl-dev postgresql-dev
# Обновление pip python
RUN pip install --upgrade pip
# Установка пакетов для проекта
COPY requirements.txt ./requirements.txt
RUN pip install -r requirements.txt
WORKDIR /app
# Удаляем зависимости билда
RUN apk del .build-deps
# Копирование проекта
COPY . .
# Настройка записи и доступа
RUN chmod -R 777 ./
docker-compose:
version: '3.8'
volumes:
pgdata:
static:
media:
services:
db:
image: postgres:alpine
container_name: db
restart: always
volumes:
- pgdata:/var/lib/postgresql/data/
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=qwerty
- POSTGRES_DB=remnovo
django:
build:
context: .
ports:
- '8000:8000'
container_name: django
env_file:
- ./docker/env/.env.dev
volumes:
- ./:/app
- static:/app/static
- media:/app/media
depends_on:
- db
command: python manage.py runserver 0.0.0.0:8000
nginx:
container_name: nginx
working_dir: /app
image: nginx:stable-alpine
restart: always
ports:
- "80:80"
volumes:
- static:/app/static
- media:/app/media
- ./docker/nginx/dev/:/etc/nginx/conf.d:ro
links:
- django
depends_on:
- django
что я сделал не так? Ошибка:
django | django.db.utils.OperationalError: connection to server at "db" (172.18.0.2), port 5432 failed: FATAL: password authentication failed for user "postgres"
settings.py:
DATABASES = {
'default': {
'ENGINE': env("DB_ENGINE"),
'NAME': env("DB_NAME"),
'USER': env("DB_USER"),
'PASSWORD': env("DB_PASSWORD"),
'HOST': env("DB_HOST"),
'PORT': env("DB_PORT"),
}
}
.env.prod:
DB_ENGINE=django.db.backends.postgresql
DB_NAME=remnovo
DB_USER=postgres
DB_PASSWORD=qwerty
DB_HOST=db
DB_PORT=5432
Ответы (1 шт):
Автор решения: argenalmaz00
→ Ссылка
Измените код settings.py
DATABASES = {
'default': {
'ENGINE': getenv("DB_ENGINE"),
'NAME': getenv("DB_NAME"),
'USER': getenv("DB_USER"),
'PASSWORD': getenv("DB_PASSWORD"),
'HOST': getenv("DB_CONNECT"), # место db_host на db_connect
'PORT': getenv("DB_PORT"),
}
}
Исправил DB_HOST
значения 0.0.0.0
Добавил DB_CONNECT
с значение 192.168.10.4
.env
DB_ENGINE=django.db.backends.postgresql
DB_NAME=remnovo
DB_USER=postgres
DB_PASSWORD=qwerty
DB_HOST=0.0.0.0
DB_PORT=5432
DB_CONNECT=192.168.10.4
Добавил yml
,Сгенерировать сеть и выдал кажды контенер ip-address и поставил первые postgres
docker-compose
version: '3.8'
volumes:
pgdata:
static:
media:
services:
postgres:
image: postgres:alpine
container_name: postgres
restart: always
env_file:
- docker/env/.env.dev
volumes:
- pgdata:/var/lib/postgresql/data/
environment:
POSTGRES_PASSWORD: example
redis:
image: redis:alpine
container_name: redis
env_file:
- docker/env/.env.dev
expose:
- 6379
volumes:
- ./docker/redis/data:/data
networks:
mynetwork:
ipv4_address: 192.168.10.4
django:
build:
context: .
ports:
- '8000:8000'
container_name: django
env_file:
- docker/env/.env.dev
volumes:
- ./:/app
- static:/app/static
- media:/app/media
depends_on:
- postgres
- redis
networks:
mynetwork:
ipv4_address: 192.168.10.2
command: sh -c "python3 manage.py collectstatic --no-input &&
python3 manage.py makemigrations &&
python3 manage.py migrate &&
python3 manage.py runserver 0.0.0.0:8000"
nginx:
container_name: nginx
working_dir: /app
image: nginx:stable-alpine
restart: always
ports:
- "80:80"
volumes:
- static:/app/static
- media:/app/media
- ./docker/nginx/dev/:/etc/nginx/conf.d:ro
links:
- django
depends_on:
- django
networks:
mynetwork:
ipv4_address: 192.168.10.3
networks:
mynetwork:
driver: bridge
ipam:
config:
- subnet: 192.168.10.0/24
gateway: 192.168.10.1