Неправильная конфигурация базы данных в seetings.py или docker - PullRequest
0 голосов
/ 11 января 2019

Я учусь работать с Compose + Django, используя это руководство https://docs.docker.com/compose/django/

Вот мои файлы конфигурации

докер-compose.yml

version: '3'

services:
  db:
    image: postgres
  web:
    build: .
    command: python3 manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db

setting.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'postgres',
        'USER': 'postgres',
        'HOST': 'db',
        'PORT': 5432,
    }
}

Когда я бегу, используя docker-compose up все нормально.

Но когда я запускаю, используя python manage.py runserver, я получил эту ошибку psycopg2.OperationalError: could not translate host name "db" to address: Name or service not known

Угадай, у меня неправильная конфигурация

Ответы [ 3 ]

0 голосов
/ 11 января 2019

Вы забыли установить hostname в сервис db.

version: '3'

services:
  db:
    image: postgres
    hostname: db
  web:
    build: .
    command: python3 manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db

Совет: не используйте runserver при развертывании производственного сервера. Отметьте этот документ

Решение описано в комментариях

Edit)

отдельный пример настроек. Сделайте ваш оригинал settings.py до base.py в папке настроек.

<your_app>/settings/local.py

from .base import *

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'postgres',
        'USER': 'postgres',
        'HOST': 'localhost',
        'PORT': 5432,
    }
}

<your_app>/settings/deploy.py

from .base import *

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'postgres',
        'USER': 'postgres',
        'HOST': 'db',
        'PORT': 5432,
    }
}

Итак, наконец, ваша папка настроек содержит три файла python. base.py, local.py, deploy.py

А при запуске сервера с локальными настройками python manage.py runserver --settings <your_app>.settings.local.

0 голосов
/ 11 января 2019

Это распространенная проблема при настройке docker / django, контейнер postgres инициализирован, но движок еще не готов. Прежде чем запускать веб-контейнер, вы должны дождаться запуска сервера postgresql.

Вы можете сделать это несколькими способами, посмотрите на dockerize

dockerize -timeout=20s -wait ${POSTGRES_PORT}
0 голосов
/ 11 января 2019

Полагаю, вы пытаетесь запустить manage.py runserver на хост-компьютере. Ошибка означает, что у вас нет доступа к хосту 'db' с него (попробуйте ping db в консоли). Есть несколько причин этого:

  1. Ваша база данных док-контейнера не работает. Попробуй запустить docker-compose up -d db
  2. Вы используете Windows в качестве хост-системы. В Windows нет доступа к контейнерам с хоста, вы должны установить postgres локально.
  3. У вас проблемы с сетью. Попробуйте ping 127.0.0.11 (это DNS-сервер докера)

P.S. Вы действительно хотите, чтобы местный Django использовал Postgres в контейнере?

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