Как получить доступ к контейнеру postgres через его имя? Не удалось перевести имя хоста ошибка

У меня есть контейнеры django и postgres. Когда пришло время django применить миграции, он не видит контейнер postgres, который я назвал pgdb, и я получаю такую ошибку:

django.db.utils.OperationalError: could not translate host name "pgdb" в адрес: Временный сбой в разрешении имен

.

Показывается, что не существует контейнера docker с именем "pgdb". Если я запускаю "docker-compose run pgdb", он создает контейнер postgres с именем "app_pgdb_run_23423423" в группе "app". Самое интересное, что я заставил его работать ранее с этой настройкой settings.py и именем контейнера postgres "pgdb". В чем может быть основная проблема?

Вы можете клонировать полный код из https://github.com/UberStreuner/mailing-service

Моя настройка settings.py, переменные окружения определенно не виноваты.

DATABASES = {
    'default': {
        'ENGINE': os.environ.get('DB_ENGINE', 'django.db.backends.postgresql_psycopg2'),
        'NAME': os.environ.get('POSTGRES_DB'),
        'USER': os.environ.get('POSTGRES_USER'),
        'PASSWORD': os.environ.get('POSTGRES_PASSWORD'),
        'HOST': os.environ.get('POSTGRES_HOST', 'pgdb'),
        'PORT': os.environ.get('POSTGRES_PORT', '5432')
    }
}

docker-compose.yml

version: "3.8"

services:
  django:
    build: .
    container_name: django
    command: ./docker-entrypoint.sh
    volumes:
      - .:/usr/src/app/
    ports:
      - "8000:8000"
    env_file:
      - ./.dev.env
    depends_on:
      - pgdb
      - redis

  celery:
    build: .
    command: celery -A mailing worker -l INFO
    volumes:
      - .:/usr/src/app/
    env_file:
      - ./.dev.env
    depends_on:
      - django
      - redis
      - pgdb

  celery-beat:
    build: .
    command: celery -A mailing beat -l INFO
    volumes:
      - .:/usr/src/app/
    env_file:
      - ./.dev.env
    depends_on:
      - django
      - redis
      - pgdb

  pgdb:
    image: postgres
    container_name: pgdb
    env_file:
      - ./.dev.env
    volumes:
      - pgdata:/var/lib/postgresql/data
    expose:
      - "5432"
    ports:
      - "5432:5432"

  redis:
    image: "redis:alpine"

volumes:
  pgdata:

.dev.env

SECRET_KEY=django-insecure-kh8ot+ag-^osyhg5itzj!iw_g#dklw3f75c0)^-7)*@^)#tc#x
DEBUG=1

DJANGO_ALLOWED_HOSTS=localhost 127.0.0.1
CELERY_BROKER=redis://redis:6379/0
CELERY_BACKEND=redis://redis:6379/0

POSTGRES_DB=django_postgres
POSTGRES_USER=postgres
POSTGRES_PASSWORD=password

docker-entrypoint.sh

#!/bin/bash
python manage.py migrate
python manage.py runserver 0.0.0.0:8000

Я исправил проблему. Возможно, дело было в том, что я импортирую переменные окружения для Django как из python-dotenv через .dev.env файл, так и из docker-compose, где они передаются как env_file. Поэтому я закомментировал загрузку dotenv из settings.py, и все заработало.

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