Django.db.utils.OperationalError: не удалось перевести имя хоста "db" в адрес: Name does not resolve. Как решить эту проблему?

Может ли кто-нибудь помочь мне решить эту проблему. Почему я получаю эту ошибку? У меня есть db в .env host и links, network в файле docker-compose тоже. Я не могу понять, где возникает проблема. Вот мой файл docker-compose

version: "3.9"
   
volumes:
  dbdata:

networks:
  django:
    driver: bridge

services:
  web:
    build: 
      context: .
    volumes:
      - .:/home/django
    ports:
      - "8000:8000"
    command: gunicorn Django.wsgi:application --bind 0.0.0.0:8000
    container_name: django_web
    restart: always
    env_file: .env
    depends_on:
      - db
    links:
      - db:db
    networks:
      - django

  db:
    image: postgres
    volumes:
      - dbdata:/var/lib/postgresql
    environment:
      - POSTGRES_DB=${DB_NAME}
      - POSTGRES_USER=${DB_USER}
      - POSTGRES_PASSWORD=${DB_PASSWORD}
    ports:
      - 5430:5432
    networks:
      - django
    container_name: django_db

вот мой .env с настройками базы данных

DB_USER=admin
DB_NAME=test
DB_PASSWORD=admin
DB_HOST=db
DB_PORT=5432
DB_SCHEMA=public
CONN_MAX_AGE=60

Проблема в том, что когда вы используете :

docker compose up --build

Как docker compose document описывает :

flag reference
--build Build images before starting containers.

Это означает, что во время сборки не запущен контейнер "db" , поэтому невозможно существование имени хоста "db" .

Предложением было бы не задействовать никакие транзакции БД во время фазы сборки. Вы можете сделать любой "рендеринг" базы данных **как процесс посева в начале работы вашего приложения

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