如何解决:Django make migrate 未从 Dockerfile 在 AWS ECS 中运行

问题描述 投票:0回答:1

我有一个在 Docker 容器中运行的 Django 项目。在本地,当我更新项目以包含对模型的更改时,我已在 docker 容器中运行

python manage.py makemigrations
python manage.py migrate
。特别是,我将从终端进入容器并运行
python manage.py makemigrations
python manage.py migrate
来执行更改。这在本地有效。但是,现在由于某种原因我已将代码推送到生产环境 (AWS ECS),
manage.py
未运行来更新现有数据库。没有证据表明
manage.py
正在日志中运行,即使它在我的
entrypoint.sh
脚本中。我是否需要在 Dajngo 项目或 AWS ECS 中设置任何其他配置才能在 AWS ECS 环境中运行迁移?该项目运行良好,因此 docker 容器已启动,只是
python manage.py migrate
从未运行。

我已包含以下

Dockerfile
供参考:

FROM python:3.11-slim-bookworm

ENV uid=1000
ENV gid=1000

ENV PYTHONUNBUFFERED 1
ENV PYTHONDONTWRITEBYTECODE 1
ENV TZ=UTC
ENV USER=app_user UID=$uid GID=$gid

RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

RUN apt-get update \
  && apt-get install -y --no-install-recommends tzdata libpcre3 libpython3-dev libpcre3-dev python3-pip build-essential libpq-dev \
  && rm -rf /var/lib/apt/lists/*

RUN mkdir -p /app

COPY Makefile pyproject.toml poetry.lock /tmp/

RUN pip install poetry
RUN poetry config virtualenvs.create false

WORKDIR /tmp


RUN make requirements.txt

RUN pip install --no-cache-dir -r requirements.txt \
    && rm -rf requirements.txt \
    && groupadd -f --gid "${GID}" "${USER}" \
    && useradd ${USER} --uid ${UID} --gid ${GID} \
    && install -d -m 0755 -o ${USER} -g ${USER} /app/static

RUN apt-get purge -y libpython3-dev python3-pip build-essential libpq-dev libpcre3-dev \
    && apt-get clean

RUN rm -rf /tmp/*

COPY book_store /app

COPY entrypoint.sh /app/entrypoint.sh
COPY post-deployment.sh /app/post-deployment.sh

WORKDIR /app

ENTRYPOINT ["./entrypoint.sh"]

我已包含以下

entrypoint.sh
供参考:

./manage.py wait_for_database
./manage.py migrate
./manage.py createsuperuser --noinput || true
./manage.py collectstatic --noinput
exec uwsgi --ini uwsgi.ini

如有任何帮助,我们将不胜感激!

django amazon-web-services docker sh database-migration
1个回答
0
投票

这可能是权限问题。您可能需要确保在 docker 容器中运行 django 应用程序的用户有权运行迁移命令..

也许尝试通过将应用程序目录的所有者设置为指定用户来明确。尝试在 dockerfile 中的 mkdir 命令下方或任何合适的位置添加以下内容。

RUN mkdir -p /app

# Set ownership for the /app directory
RUN groupadd -f --gid "${GID}" "${USER}" \
&& useradd ${USER} --uid ${UID} --gid ${GID} \
&& chown -R ${USER}:${USER} /app
© www.soinside.com 2019 - 2024. All rights reserved.