Проблема с подключением локального 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 именно для этой проблемы.

Вернуться на верх