Попытка подключить Docker + Django к Postgres - не удалось перевести имя хоста "db" в адрес: Имя или служба не известны
Я пытаюсь докеризировать проект Django + Postgres, следуя этому руководству: https://docs.docker.com/samples/django/
Когда я запускаю docker-compose up
, я получаю:
django.db.utils.OperationalError: could not translate host name "db" to address: Name or service not known
Dockerfile
# syntax=docker/dockerfile:1
FROM python:3
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /code/
docker-compose.yml
version: "3.9"
services:
db:
image: postgres
volumes:
- ./data/db:/var/lib/postgresql/data
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
environment:
- POSTGRES_NAME=postgres
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
depends_on:
- db
settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': config('DB_NAME'),
'USER': config('DB_USER'),
'PASSWORD': config('DB_PASSWORD'),
'HOST': config('DB_HOST'),
'PORT': 5432,
}
}
Скорее всего, ваш контейнер Postgres не запускается и падает, поскольку вы не указали пароль по умолчанию. Согласно документации - https://hub.docker.com/_/postgres,
Образ PostgreSQL использует несколько переменных окружения, которые легко пропустить. Единственной обязательной переменной является POSTGRES_PASSWORD, остальные необязательны.
Чтобы проверить это, запустите docker ps
и посмотрите, запущен ли контейнер postgres, если нет, проверьте журналы docker container logs [Container id]
Я бы рекомендовал вам добавить и другие переменные, поскольку без этого ваше приложение Django не будет работать. Вам необходимо добавить POSTGRES_DB
и POSTGRES_USER
также.
Обновите службу db
следующим образом
db:
image: postgres
volumes:
- ./data/db:/var/lib/postgresql/data
environment:
POSTGRES_PASSWORD:
POSTGRES_USER:
POSTGRES_DB:
Убедитесь, что они совпадают с теми, что указаны в конфигурации Django.