Попытка подключить 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.

Вернуться на верх