Django не подключается к базе данных postgresql с помощью docker-compose
Да, я знаю, что этот вопрос уже задавался, и обычная ошибка заключается в том, что DB_HOST = имени службы докера, в моем случае db
.
Вот мой docker-compose.yml
:
version: "3"
services:
db:
image: postgres:latest
restart: always
ports:
- "54320:5432"
expose:
- "54320"
volumes:
- ./database-data:/var/lib/postgresql/data/ # persist data even if container shuts down
environment:
- POSTGRES_DB=postgres
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
# POSTGRES_HOST_AUTH_METHOD: trust
django:
build: ./api
restart: always
command: ["python", "manage.py", "runserver", "0.0.0.0:8000"]
volumes:
- ./api:/app/api
ports:
- "8000:8000"
depends_on:
- db
raddl_admin:
build: ./frontend/raddl_admin
stdin_open: true # docker run -i
tty: true # docker run -t
command: ["npm", "start"]
ports:
- "3000:3000"
volumes:
- ./frontend/raddl_admin:/app/frontend/raddl_admin
- /app/frontend/raddl_admin/node_modules
volumes:
database-data: # named volumes can be managed easier using docker-compose
Запись в журнал службы django
дает:
django.db.utils.OperationalError: could not connect to server: Connection refused
Is the server running on host "db" (172.18.0.2) and accepting
TCP/IP connections on port 54320?
Итак, он явно пытается подключиться к db
на этом порту, и мои параметры окружения установлены для экземпляра django.
Я даже могу пинговать свой сервис db
с моего django service
:
docker exec -it 1f764333ace2 bash | ping db
PING db (23.221.222.250): 56 data bytes
64 bytes from 23.221.222.250: icmp_seq=0 ttl=50 time=42.055 ms
64 bytes from 23.221.222.250: icmp_seq=1 ttl=50 time=42.382 ms
6
Почему я не могу подключиться к службе db из Django?
Ах, значит, моя проблема была связана с номером порта. По какой-то причине, если порт db exposed port был равен "5432", это было решено. Я думал, что это могло привести к конфликту с экземпляром postgres на localhost моего хоста. Думаю, нет.