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