为什么docker-compose版本不能反映我的django代码更改?
所以我有一个我用docker-compose部署的Django项目。 我的profile_form.html模板中有一个简单的错误,第3行突出显示。
{% include "header.html" %} {% load i18n %} {% load url from future %} 'future' is not a registered tag library
所以我简单地删除加载url行,保存profile_form.html,然后尝试构build一个反映代码更改的新容器。
docker-compose build docker-compose start
这并没有解决这个问题,我得到了同样的错误。 我跑进了集装箱
docker-compose exec -i -t <containerid> /bin/bash
并检查了profile_form.html,确保足够的第3行仍然存在。
除非我错过了一些完全明显的东西,这告诉我,我对docker-compose构build的理解是不正确的。 正如我以为docker-compose构build将能够确定“是”在“web”目录中有一个代码更改“,然后重build容器。
您不需要重新编译用于开发的Docker镜像,每次更改代码。 这将花费太多时间。 但是因为你正在开发Django,我假设你正在使用django( python manage.py runserver
)附带的开发服务器,你可以直接将新的代码更改发送到你的容器,让开发服务器热加载代码正如你在开发本地机器上的django应用程序时习惯的那样。 您需要将卷从主机映射到容器,该容器接收最新的代码并使用它来更新您的应用程序。
既然你没有提供任何代码示例,我只能猜测你在做什么。 看看docker开发人员直接提供的示例: https : //docs.docker.com/compose/django/
他们的Dockerfile:
FROM python:2.7 ENV PYTHONUNBUFFERED 1 RUN mkdir /code WORKDIR /code ADD requirements.txt /code/ RUN pip install -r requirements.txt ADD . /code/
ADD . /code/
ADD . /code/
最初将您的本地代码复制到容器中。 这是您第一次构build映像时应用程序的初始状态。 但是我们不想在每个代码更改上构build图像,因为这需要几分钟的时间。 您正在使用docker-compose,并且可以将卷映射到您的容器,以便重新加载热代码,正如Docker开发人员在教程中所看到的:
version: '2' services: db: image: postgres web: build: . command: python manage.py runserver 0.0.0.0:8000 volumes: - .:/code # <-- THIS line enables hot code reloading! ports: - "8000:8000" depends_on: - db
我标记了代码重新加载的重要行。 这一行确保您的本地机器上的每个更改都反映在容器内。 开发服务器runserver
识别本地代码更改并重新启动Web服务器,只需要几秒钟。
这是在Docker容器中使用django应用程序的方法。
为什么在运行docker-compose start之后没有任何更改?
docker-compose start
在你的代码中用错误的行开始旧图像的旧容器。 您需要使用新图像创build新的容器。 对于这种情况是命令docker-compose up
。 从docker-compose start
的文档 :
用法:开始[SERVICE …]
启动服务的现有容器。
可以肯定的是,您可以使用docker-compose rm
删除旧的容器。 这只会删除您的容器,而不是图像。
- 如何运行与Docker的OpenEats(Django配方pipe理)?
- 当使用docker / fig运行Django dev服务器时,为什么一些日志输出被隐藏了?
- 在Docker容器上构build图像以运行自己的Django应用程序
- 使用Docker部署Django应用程序
- 对docker客户端执行本地的python脚本 – 没有卷
- 更改图像后更新Docker容器
- 在docker容器内的virtualenv中运行django应用程序的目的是什么?
- Django信号在多容器设置中不能与通道一起工作
- AttributeError:模块'wagtail.wagtailadmin.edit_handlers'没有属性'FieldPanel'