Django, Docker и Pipenv - Ошибка при добавлении новых пакетов - PullRequest
0 голосов
/ 20 ноября 2018

Использование Pipenv с Docker вызывает некоторые проблемы в моем проекте Django.

Я установил Django локально с Pipenv, который генерирует Pipfile и Pipfile.lock.Затем использовал startproject для запуска нового проекта Django.

Затем я добавляю файл Dockerfile.

# Dockerfile
FROM python:3.7-slim

ENV PYTHONUNBUFFERED 1

WORKDIR /code
COPY . /code

RUN pip install pipenv
RUN pipenv install --system

и файл docker-compose.yml.

# docker-compose.yml
version: '3'

services:
  web:
    build: .
    command: python /code/manage.py migrate --noinput && /code/manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - 8000:8000

И запустите docker-compose up --build, чтобы построить образ и запустить контейнер.Все работает.

Теперь вот проблема ... Я хочу добавить новый пакет, скажем, psycopg2, чтобы я мог использовать PostgreSQL.

Итак ... обновите мой docker-compose.ymlдобавить PostgreSQL.

# docker-compose.yml
version: '3'

services:
  db:
    image: postgres
    volumes:
      - postgres_data:/var/lib/postgresql/data/
  web:
    build: .
    command: python /code/manage.py migrate --noinput && /code/manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - 8000:8000
    depends_on:
      - db

volumes: postgres_data:

и обновить конфигурацию DATABASE в settings.py.

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

Теперь, если я установлю psycopg2-binary локально, как pipenv install psycopg2-binary, это "следует"синхронизировать с докером.Но я получаю «Нет модуля с именем« psycopg2 »ошибки».

Хорошо, возможно, мне нужно установить его непосредственно в Docker:

$ docker-compose exec web pipenv install psycopg2-binary` 

Нет, та же ошибка.

Может быть, мне нужно сгенерировать файл блокировки в Docker?

$ docker-compose exec web pipenv lock

Опять нет.Таким образом, проблема в состоянии Pipenv ... Я чувствую, что я близко, но просто не совсем что-то понимаю здесь.

Кто-нибудь видит ошибку?

...