@Lepilov

Postgresql и использование виртуального окружения и docker на одном проекте?

Локально настраиваю проект для работы с docker и pipenv. В settings.py настроек БД изменил
DATABASES = {
        'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'postgres',
        'USER': 'postgres',
        'PASSWORD': 'postgres',
        'HOST': 'db',
        'PORT': 5432
        }
}


и добавлении в yml файл секции db

docker-compose.yml

version: '3.7'
services:
  web:
    build: .
    command: python /profi/manage.py runserver 0.0.0.0:8000
    environment:
      - SECRET_KEY=dy)zvq+sf07^^456t$$6+mv*tj6#5iwyo896-z!v=h^njl9^&@q
      - DEBUG=1
    volumes:
      - .:/profi
    ports:
      - 8000:8000
    depends_on:
      - db
  db:
    image: postgres:11
    volumes:
      - postgres_data:/var/lib/posgresql/data/

volumes:
  postgres_data:


Если запускаю сервер через docker-compose upто все стартует, только каждый раз надо создавать админа. БД не запоминает данные. Что то не доделал в volumes ?
Но основной вопрос - когда запускаю сервер не испльзуя docker, а через pipenv shell python manage.py runserver то получаю ошибку

django.db.utils.OperationalError: could not translate host name "db" to address: Name or service not known


Что то в docker-compose.yml не правильно? Подскажите пожалуйста что поправить.
  • Вопрос задан
  • 3991 просмотр
Пригласить эксперта
Ответы на вопрос 1
@Lepilov Автор вопроса
В итоге рабочая конфигурация такая

docker-compose.yml
version: '3.7'
services:
  web:
    build: .
    command: python /profi/manage.py runserver 0.0.0.0:8000
    environment:
#      DJANGO_SETTINGS_MODULE: "project.settings.development"
      DEBUG: 1
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
      POSTGRES_DB: postgres
      POSTGRES_HOST: db

    volumes:
      - .:/profi
    ports:
      - "${HTTP_PORT:-8000}:8000"
    depends_on:
      - db
  db:
    image: postgres:11
    volumes:
      - postgres_data:/var/lib/posgresql/data/
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
      POSTGRES_DB: postgres
      POSTGRES_HOST: db
    ports:
      - "${DB_PORT:-5432}:5432"

volumes:
  postgres_data:


settings.py
DATABASES = {
        'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': os.environ.get('POSTGRES_DB', default='postgres'),
        'USER': os.environ.get('POSTGRES_USER', default='postgres'),
        'PASSWORD': os.environ.get('POSTGRES_PASSWORD', default='postgres'),
        'HOST': os.environ.get('POSTGRES_HOST', default='localhost'),
        'PORT': "5432"
        }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы