Не удалось подключиться к контейнеру Postgres в Django
django.db.utils.OperationalError: соединение с сервером по адресу "db" (172.18.0.2), порт 5432 не удалось: FATAL: система базы данных запускается
У меня проблема с подключением к Postgres contaner. Я пробовал разные способы, например, устанавливать пароли только в файле docker-compose. Но все равно застрял.
docker-compose.yml
version: '3'
services:
db:
image: postgres:alpine
environment:
- POSTGRES_PASSWORD=password
- POSTGRES_USER=user
- POSTGRES_DB=userdb
volumes:
- django_db:/var/lib/postgresql/data
container_name: db
singup:
build: .
command: python manage.py runserver 0.0.0.0:8000
ports:
- 8000:8000
container_name: singup
depends_on:
- db
volumes:
django_db:
настройка базы данных
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'userdb',
'USER': 'user',
'PASSWORD': 'password',
'HOST': 'db',
}
}
Это проблема времени, даже если у вас есть следующая строка
singup:
depends_on:
- db
Это просто ожидание запуска контейнера db, не обязательно Postgres.
Чтобы избежать этого, используйте такие инструменты, как wait-for-it, dockerize, sh-совместимый wait-for или шаблон RelayAndContainers. Это небольшие сценарии-обёртки, которые вы можете включить в образ вашего приложения для опроса заданного хоста и порта до тех пор, пока он не начнёт принимать TCP-соединения.
Например, чтобы использовать wait-for-it.sh или wait-for для обертывания команды вашего сервиса:
singup:
depends_on:
- db
command: ["./wait-for-it.sh", "db:5432", "--", "python", "app.py"]
Перезапись ожидания: https://github.com/vishnubob/wait-for-it