Использование 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 ... Я чувствую, что я близко, но просто не совсем что-то понимаю здесь.
Кто-нибудь видит ошибку?