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 моего хоста. Думаю, нет.

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