docker -создать exe c web python manage.py проблема makemigrations - PullRequest
1 голос
/ 13 января 2020

Проблема

Я создал новый проект Django и попытался изменить базу данных по умолчанию на PostgreSQL. После изменения DATABASES в settings.py я попытался запустить python manage.py migrate в локальной среде и docker -компоновать контейнеры. Хотя он работал нормально в локальных настройках, docker -композиция не работала. Бросает django.core.exceptions.ImproperlyConfigured: Error loading psycopg2 module: No module named 'psycopg2'. ошибка. Итак, есть ли способ исправить это?

Действия по репликации ошибки

ОС: WSL Ubuntu 4.4.0-18362-Microsoft

  1. docker-compose up -d
  2. docker-compose exec web pipenv install psycopg2-binary==2.8.4
  3. docker-compose down
  4. docker-compose exec web python manage.py migrate

Настройки базы данных и Docker Файлы

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

My docker -compose.yml, Dockerfile

Dockerfile

FROM python:3.8

ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

WORKDIR /code

COPY Pipfile Pipfile.lock /code/

RUN pip install pipenv && pipenv install --system
RUN pipenv run pip install psycopg2-binary==2.8.4

COPY . /code/

docker -compose.yml

version: '3.7'

services:
    web:
        build: .
        command: python /code/manage.py runserver 0.0.0.0:8080
        volumes:
            - ./code

        ports:
            - 8080:8080
        depends_on:
            - db

    db:
        image: postgres:11

1 Ответ

1 голос
/ 13 января 2020

Ваш Django работает внутри контейнера web, поэтому вам нужно go войти в этот контейнер для запуска django команд.

Поэтому, когда вы запускаете docker-compose down после exe c install он удалит предыдущий контейнер

После запуска docker -составить

Просто запустите 2 другие команды и не запускайте docker-compose down

, если хотите запустить его вручную

Вы можете go в контейнер bash с помощью:

docker - составить exe c web / bin / bash

Когда вы окажетесь в консоли, вы можете набрать:

python3 manage.py makemigrations

Если вы хотите выйти из контейнера bash оболочка просто типа exit

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