【问题标题】:How to update django app deployed with docker-compose? Now it seems running old version of code如何更新使用 docker-compose 部署的 django 应用程序?现在似乎正在运行旧版本的代码
【发布时间】:2019-06-08 12:58:45
【问题描述】:

我有基于 cookiecutter-django 的 django web 应用程序。该堆栈建立在几个运行的容器上:django、redis、celerybeat、celery worker、celery flower、postgres、caddy。当我在 VPS 上的生产环境中启动应用程序时,我遇到了奇怪的行为 - 尽管从 git 存储库中检查了新代码,但 django 似乎正在运行旧版本的代码(例如使用表单版本)。我尝试了一些操作来“强制”刷新应用程序代码:

  • docker-compose down 然后用docker-compose build 重建所有容器,然后docker-compose up

  • 与上述类似的重建,但仅适用于带有 django 的容器。

当我检查 django 容器内的代码时 - 有正确版本的代码。 我使用Django Debug Toolbar 进行了检查应用程序 - 似乎没有从缓存中加载页面(没有从后端调用缓存,并且有许多对数据库的查询可能表明页面没有从缓存中加载)。 我期待 django 会自动检测代码更改并重新启动运行新代码,另外可能需要重新启动解释器(这应该通过放下容器并重新构建来解决)。有什么想法可以检查或尝试吗?删除所有容器、图像和卷有所帮助,但这不是我介绍每个更新的首选方式。 我经历了来自Why does docker-compose build not reflect my django code changes?After docker-compose build the docker-compose up run old not updated containers 的解决方案,但除了“核弹一切”之外,没有一个对我有用。有没有办法“软重装”? 这是 django 容器的 Dockerfile:


    # Dockerfile for django container
    FROM python:3.6-alpine

    ENV PYTHONUNBUFFERED 1

    RUN apk update \
    # psycopg2 dependencies
    && apk add --virtual build-deps gcc python3-dev musl-dev \
    && apk add postgresql-dev \
    # Pillow dependencies
    && apk add jpeg-dev zlib-dev freetype-dev lcms2-dev openjpeg-dev tiff-dev tk-dev tcl-dev \
    # CFFI dependencies
    && apk add libffi-dev py-cffi

    RUN addgroup -S django \
    && adduser -S -G django django

    # Requirements are installed here to ensure they will be cached.
    COPY ./requirements /requirements
    RUN pip install --no-cache-dir -r /requirements/production.txt \
    && rm -rf /requirements

    COPY ./compose/production/django/entrypoint /entrypoint
    RUN sed -i 's/\r//' /entrypoint
    RUN chmod +x /entrypoint
    RUN chown django /entrypoint

    COPY ./compose/production/django/start /start
    RUN sed -i 's/\r//' /start
    RUN chmod +x /start
    RUN chown django /start

    COPY ./compose/production/django/celery/worker/start /start-celeryworker
    RUN sed -i 's/\r//' /start-celeryworker
    RUN chmod +x /start-celeryworker
    RUN chown django /start-celeryworker

    COPY ./compose/production/django/celery/beat/start /start-celerybeat
    RUN sed -i 's/\r//' /start-celerybeat
    RUN chmod +x /start-celerybeat
    RUN chown django /start-celerybeat

    COPY ./compose/production/django/celery/flower/start /start-flower
    RUN sed -i 's/\r//' /start-flower
    RUN chmod +x /start-flower

    COPY . /app

    RUN chown -R django /app

    USER django

    WORKDIR /app

    ENTRYPOINT ["/entrypoint"]

【问题讨论】:

    标签: django docker-compose


    【解决方案1】:

    如果有人遇到这种情况,答案是每次推送新代码时都必须重建容器。

    只要跑 docker-compose -f production.yml build 更新生产版本

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-12
      • 1970-01-01
      • 1970-01-01
      • 2021-01-23
      • 1970-01-01
      • 1970-01-01
      • 2018-11-26
      • 2021-06-03
      相关资源
      最近更新 更多