docker-compose exec web python manage.py makemigrations问题

时间:2020-01-13 06:53:44

标签: python django docker docker-compose

问题

我创建了一个新的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

  1. docker-compose up -d
  2. docker-compose exec web pipenv install psycopg2-binary==2.8.4
  3. docker-compose down
  4. docker-compose exec web python manage.py migrate

数据库设置和Docker文件

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

我的docker-compose.yml,Dockerfile

Dockerfile

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/

docker-compose.yml

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

2 个答案:

答案 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"