我创建了一个新的Django项目,并尝试将数据库从默认更改为PostgreSQL。在settings.py中更改DATABASES
后,我尝试在本地环境和docker-compose容器中运行python manage.py migrate
。虽然在本地设置中可以正常运行,但docker-compose却没有。它抛出django.core.exceptions.ImproperlyConfigured: Error loading psycopg2 module: No module named 'psycopg2'
。错误。那么,有什么办法可以解决这个问题?
OS:WSL Ubuntu 4.4.0-18362-Microsoft
docker-compose up -d
docker-compose exec web pipenv install psycopg2-binary==2.8.4
docker-compose down
docker-compose exec web python manage.py migrate
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'postgres',
'USER': 'postgres',
'PASSWORD': 'Bardwolf@314',
'HOST': 'localhost',
'PORT': 5432
}
}
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/
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
答案 0 :(得分:1)
您的Django在web
容器中运行,因此您需要进入该容器以运行django命令。
因此,在执行安装后运行docker-compose down
时,它将删除以前的容器
运行docker-compose up之后
仅运行其他2条命令,而不运行docker-compose down
如果要手动运行
您可以通过以下方式进入容器重击:
docker-compose exec web / bin / bash
进入控制台后,您可以输入:
python3 manage.py makemigrations
如果要退出容器bash shell,只需键入exit
答案 1 :(得分:0)
你可以用这种方式...
docker-compose exec web sh -c "python manage.py makemigrations --noinput"