Django не может подключится к postgres
Есть docker-compose.yml, который запускает три контейнера: frontend, backend и database. После старта контейнеров, фронтенд доступен, но джанго не может подключиться к базе, вылетает ошибка:
Is the server running on host "database" (10.254.0.2) and accepting
TCP/IP connections on port 5432?
После того, как я перезагружу контейнер с джангой (docker restart f6aea49c798e), все взлетает и интерфейс джанги отвечает. В момент проблемы, если провалиться в контейнер с джангой, пинг до базы работает, и телнет 5432 тоже. Что я делаю не так? Ниже мой docker-compose файл. Я пробовал выставлять depends_on, пробовал делать health-check, как видите ниже.
CONTAINER ID IMAGE COMMAND CREATED STATUS
PORTS NAMES
f6aea49c798e localhost:5000/backend "python manage.py ru…" 23 hours ago Up 23 hours 0.0.0.0:8181->8000/tcp, :::8181->8000/tcp backend
53116b53c03a postgres:latest "docker-entrypoint.s…" 23 hours ago Up 23 hours (healthy) 0.0.0.0:5432->5432/tcp, :::5432->5432/tcp database
e0b379a85516 localhost:5000/frontend "docker-entrypoint.s…" 23 hours ago Up 23 hours 0.0.0.0:81->3000/tcp, :::81->3000/tcp frontend
cc7d032bf271 registry:2 "/entrypoint.sh /etc…" 27 hours ago Up 27 hours 0.0.0.0:5000->5000/tcp, :::5000->5000/tcp registry
---
services:
frontend:
restart: unless-stopped
container_name: frontend
image: localhost:5000/frontend
tty: True
ports:
- 81:3000
backend:
restart: always
container_name: backend
image: localhost:5000/backend
ports:
- 8181:8000
networks:
- back
depends_on:
db:
condition: service_healthy
db:
restart: unless-stopped
container_name: database
image: postgres:latest
ports:
- 5432:5432
environment:
POSTGRES_DB: django
POSTGRES_USER: django
POSTGRES_PASSWORD: django
networks:
- back
healthcheck:
test: ["CMD-SHELL", "pg_isready -U django"]
interval: 5s
timeout: 5s
retries: 5
networks:
back:
driver: bridge
ipam:
config:
- subnet: 10.254.0.0/24
gateway: 10.254.0.1
aux_addresses:
db: 10.254.0.10
backend: 10.254.0.20
Если просто пытаюсь запустить конейнеры без компоса, то происхолдит тоже самое.
docker network create --subnet 10.100.0.0/24 --ip-range 10.100.0.0/24 myNetwork
docker run -td --name database --network=myNetwork -p 5432:5432 localhost:5000/postgres
docker run -td --name django --network=myNetwork -p 8181:8000 localhost:5000/backend