在Docker项目中使用Pipenv会导致我的Django项目出现一些问题。
我已经用Pipenv在本地安装了Django,它会生成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
,则该“应该”与Docker同步。但是我收到“没有名为“ psycopg2”的模块错误”。
好,所以也许我需要直接在Docker中安装它:
$ docker-compose exec web pipenv install psycopg2-binary`
不,同样的错误。
也许我需要在Docker中生成锁定文件?
$ docker-compose exec web pipenv lock
再次。所以问题是Pipenv的状态...我觉得我已经接近了,但在这里还不太了解。
有人看到错误了吗?