Using Pipenv with Docker is causing some issues in my Django project.
I've installed Django locally with Pipenv which generates a Pipfile
and Pipfile.lock
. Then used startproject
to start a new Django project.
Then I add a Dockerfile
file.
# Dockerfile
FROM python:3.7-slim
ENV PYTHONUNBUFFERED 1
WORKDIR /code
COPY . /code
RUN pip install pipenv
RUN pipenv install --system
And a docker-compose.yml
file.
# 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
And run docker-compose up --build
to build the image and start the container. Everything works.
Now here's the issue...I want to add a new package, let's say psycopg2
so I can use PostgreSQL.
So...update my docker-compose.yml
to add 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:
And update the DATABASE
config in settings.py
.
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'postgres',
'USER': 'postgres',
'HOST': 'db',
'PORT': 5432
}
}
Now if I install psycopg2-binary
locally like pipenv install psycopg2-binary
this "should" sync with Docker. But I get "No module named 'psycopg2'` errors".
Ok so maybe I need to install it directly within Docker:
$ docker-compose exec web pipenv install psycopg2-binary`
Nope, same error.
Maybe I need to generate the lock file within Docker?
$ docker-compose exec web pipenv lock
Again no. So the issue is the state of Pipenv...I feel like I'm close but just not quite grasping something here.
Anyone see the error?