我让 Django 在 Docker 容器中运行。我的 Docker 文件的 CMD 只运行一个脚本,launch.sh,其中包括以下命令:
python manage.py makemigrations --no-input --verbosity 1
python manage.py migrate --no-input --verbosity 1
因此,这些命令在我的 Django 项目上进行迁移,然后在我的容器启动时执行迁移(如果有的话)。这适用于特定的项目级迁移。
然而,不可避免的是,只进行了项目级别的迁移——也就是说,从未进行过应用级别的迁移,因此也从未执行过。但是,如果我登录到容器(使用 docker exec -it ... bash)并手动执行相同的迁移命令,则会进行应用程序级别的迁移。
谷歌搜索和对我的代码的众多变体并没有为这种行为或任何修复提供任何解释,所以我很难过。
有任何想法吗?
PS这是我的项目和应用程序结构:
/django/
project/
app/
static/
manage.py
此外,我尝试在我的脚本中连续两次执行相同的命令集,并连续运行相同的命令集,但将我的应用程序指定为目标选项,但这些尝试仍然产生相同的结果:只有项目迁移是制作的,而不是应用程序迁移。
如被问及,这是我的 Dockerfile:
FROM python:3-slim
ENV PYTHONUNBUFFERED 1
ADD django-requirements.pip .
RUN pip install --upgrade pip && \
pip install --no-cache-dir -r django-requirements.pip
WORKDIR /
ADD launch.sh .
CMD ./launch.sh
我的 Django 项目在启动时安装在 /django,并且在运行迁移命令之前,我的启动脚本 CD 到 /django。