Docker-контейнер, соединяющийся с базой данных Postgres - PullRequest
0 голосов
/ 10 декабря 2018

Я получаю следующую ошибку при подключении моего Docker-контейнера Django к моей базе данных Postgres.

    File "/usr/local/lib/python3.6/site-packages/psycopg2/__init__.py", line 
    130, in connect conn = _connect(dsn, 
    connection_factory=connection_factory, **kwasync)
    django.db.utils.OperationalError: 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?
    could not connect to server: Cannot assign requested address
    Is the server running on host "localhost" (::1) and accepting
    TCP/IP connections on port 5432?

Ниже мой Dockerfile, который запускает контейнер

   FROM python:3.6

    MAINTAINER c15523957

    RUN apt-get -y update
    RUN apt-get -y upgrade

    RUN apt-get -y install libgdal-dev

    RUN mkdir -p /usr/src/app

    COPY requirements.txt /usr/src/app/
    COPY . /usr/src/app

    WORKDIR /usr/src/app

    RUN pip install --upgrade pip
    RUN pip install --no-cache-dir -r requirements.txt

   EXPOSE 8000
   CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]

Вот кодв моем файле settings.py моего кода Django

    DATABASES = {
        'default': {
           'ENGINE': 'django.contrib.gis.db.backends.postgis',
           'NAME': 'place_loc_db',
           'USER': 'place_loc_user',
          'PASSWORD': 'abc123',
          'HOST': 'localhost',
          'PORT': 5432,
  }

}

Примечание: у меня не база данных postgres, работающая как контейнер, а на моем локальном компьютере

Примечание. Следующая информация содержится в моих файлах pg_hba.conf и postgresql.conf

postgresql.conf -> listen_addresses = '*'

pg_hba.conf -> host all all 0.0.0.0/0 md5

Я прочитал, что следующие детали выше открывают соединения с базой данных.

Ответы [ 2 ]

0 голосов
/ 07 июля 2019
  1. Убедитесь, что это сделано

    postgresql.conf-> listen_addresses = '*'

    pg_hba.conf -> host all all 0.0.0.0/0 md5

  2. brew services start postgresql (В MAC перезагрузите службу postgres).

  3. Получите IP-адрес своей системы.
  4. Используйте IP-адрес своей системы.вместо localhost в вашем подключении к БД.
0 голосов
/ 10 декабря 2018

Похоже, вы пытаетесь подключиться к localhost.Ваша база данных Postgres не работает в том же контейнере, что и ваше приложение django, поэтому вы не сможете найти его в localhost.Вам нужно указать свое приложение по адресу контейнера Postgres.

Если вы запускаете ваши контейнеры в определенной пользователем сети (используя docker-compose , вы сделаете это автоматически), затемВы можете использовать имя контейнера в качестве имени хоста.

Документация по работа с контейнерами - хорошее место для начала.

Обновление

Тот факт, что вы запускаете Postgres на своем хосте, существенно не меняет ответ: вам все равно нужно указать свое веб-приложение по адресу сервера Postgres, а не localhost.

Самый простой способвыполнение этого зависит от того, работаете ли вы в Docker изначально в Linux, или вы используете Docker-For-X, где X - MacOS или Windows.

В Linux просто наведите ваше веб-приложение наIP-адрес интерфейса docker0.Это адрес вашего хоста, и поскольку Postgres настроен на прослушивание на всех интерфейсах, это должно сработать.

Если вы работаете на Mac или Windows, естьспециальное «волшебное имя хоста», которое относится к сервисам на вашем хосте.Например, прочитайте это для деталей под MacOS.В обоих случаях вы можете указать свое веб-приложение на host.docker.internal.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...