Проблема с подключением локального postgres к контейнеру docker
У меня есть файл docker.compose.yml:
version: '3.8'
services:
web:
build: ./kazarm
command: python manage.py runserver 0.0.0.0:8000
volumes:
- ./kazarm/:/usr/src/app/
ports:
- 8000:8000
env_file:
- ./.env.dev
depends_on:
- db
db:
image: postgres:13.0-alpine
ports:
- 127.0.0.1:5432:5432
environment:
- POSTGRES_USER=kazarma
- POSTGRES_PASSWORD=kazarma
- POSTGRES_DB=kazarma
networks:
outside:
external: true
В Django DB setting.py
SQL_ENGINE=django.db.backends.postgresql
SQL_DATABASE=kazarma
SQL_USER=kazarma
SQL_PASSWORD=kazarma
SQL_HOST=127.0.0.1
SQL_PORT=5432
В файле pg_hba.conf
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 trust
# IPv6 local connections:
host all all ::1/128 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
local replication all trust
host replication all 127.0.0.1/32 trust
host replication all ::1/128 trust
и в postgres.cong также listen_addresses = '*'
И я пытаюсь использовать различные SQL_HOST, например localhost, 127.0.0.1
все не работает.
Но когда я беру SQL_HOST=db
, то все работает.
docker-compose log file
django.db.utils.OperationalError: could not connect to server: Connection refused
web_1 | Is the server running on host "127.0.0.1" and accepting
web_1 | TCP/IP connections on port 5432?
Я хочу использовать локальный Postgres, потому что данные очень важны, и когда я отключу свой docker, я могу потерять данные в контейнере.
'HOST': 'db',
Postgres Host должен указывать на контейнер, в котором запущен DB. Когда вы явно указываете 127.0.0.1
, он смотрит внутрь контейнера. В вашем веб-контейнере 127.0.0.1:5432
не сопоставлен с контейнером postgres. db:5432
является.
Вот официальная документация от Docker именно для этой проблемы.