Невозможно подключиться к докер-контейнеру Postgres из контейнера Django
services:
db:
image: postgres
volumes:
- ./data/db:/var/lib/postgresql/data
environment:
- POSTGRES_DB=postgres
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
ports:
- "5432:5432"
backend:
build: .
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
environment:
- POSTGRES_NAME=postgres
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
depends_on:
- db
Вот конфигурация докера. Проблема в том, что бэкенд (Django) не может подключиться к БД postgres. Я пробовал с хостом БД как localhost и он не смог подключиться.
could not connect to server: Connection refused
Is the server running on host "localhost" (127.0.0.1) and accepting
TCP/IP connections on port 5432?
Затем я изменил хост на ip-адрес контейнера db, но все еще без успеха, на этот раз это была ошибка таймаута.
could not connect to server: Connection timed out
Is the server running on host "172.11.0.2" and accepting
TCP/IP connections on port 5432?
Вот как я подключаюсь к postgres.
from sqlalchemy import create_engine
engine = create_engine("postgresql+psycopg2://postgres:postgres@172.11.0.2:5432/postgres",
poolclass=QueuePool,
pool_size=5,
max_overflow=10,
pool_timeout=1)
Я думаю, что это точно как-то связано с тем, что два контейнера разные, но может ли кто-нибудь помочь мне, как подключиться к контейнеру Postgres из контейнера Django?
Любая служба может связаться с любой другой службой по имени этой службы.
В docker-compose сервисы отображаются друг на друга по их имени. Поэтому в хосте нужно использовать db, которое является именем службы базы данных.
Для получения более подробной информации ознакомьтесь с документами