Использование локальной базы данных postgres в контейнере docker

Привет всем, я пытаюсь подключить мою базу данных postgres, установленную в ubuntu 20.04, к контейнеру docker, который будет находиться вне контейнера. Я работаю над проектом django.

Я могу создать базу данных postgres внутри контейнера docker и подключить мой проект django к этой базе данных, но я хочу подключить localdatabase к проекту django, который запущен в контейнере docker

Вот мой файл docker-compose.yml

version: '3.3'

services:

  # Description (For the postgres databse)
  kapediadb:
    image: postgres

    restart: always

    container_name: kapediadb
    # For accessing env data
    environment:
      - POSTGRES_DB=${DB_NAME}
      - POSTGRES_USER=${DB_USER}
      - POSTGRES_PASSWORD=${DB_PASSWORD}

  # Description (For django applications)
  kapedia:

    restart: always

    container_name: kapedia

    command:
      - /bin/bash
      - -c
      - |
        python manage.py makemigrations  accounts
        python manage.py makemigrations  posts
        python manage.py makemigrations  quiz
        python manage.py migrate
        gunicorn kapedia.wsgi:application --bind 0.0.0.0:8000


    image: kapedia

    # Description (define your dockerfile location here)
    build: .

    volumes:
      - .:/kapedia

    ports:
      - "8000:8000"

    depends_on:
      -   kapediadb

    env_file:
      - .env

# Description (For volumes)
volumes:
  static:

просто вы можете добавить это внутри контейнера проекта:

extra_hosts:
   - "host.docker.internal:172.17.0.1"

Чтобы найти IP docker, т.е. 172.17.0.1 (в моем случае), вы можете использовать в терминале локальной машины:

$> ifconfig docker0
docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255

В postgresql.conf, измените listen_addresses на listen_addresses = '*'

В pg_hba.conf добавьте это в конце строки

host    all             all             0.0.0.0/0               md5

Теперь перезапустите службу postgresql используя, sudo service postgresql restart

Пожалуйста, используйте host.docker.internal имя хоста для подключения к базе данных из серверного приложения.

Ex: jdbc:postgresql://host.docker.internal:5432/bankDB

Примечание: sudo nano /etc/postgresql/<your_version>/main/postgresql.conf используйте эту команду для открытия postgresql.conf файла

Так вы можете подключить вашу локальную базу данных к docker-contaner

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