dav*_*vid 6 django docker docker-compose
所以我有一个我用Docker-compose部署的Django项目.我的profile_form.html模板中有一个简单的错误,第3行突出显示.
{% include "header.html" %}
{% load i18n %}
{% load url from future %}
'future' is not a registered tag library
Run Code Online (Sandbox Code Playgroud)
所以我简单地删除了加载URL行,保存profile_form.html,然后尝试构建一个反映代码更改的新容器.
docker-compose build
docker-compose start
Run Code Online (Sandbox Code Playgroud)
这没有解决问题,我得到了同样的错误.我跑进了容器
docker-compose exec -i -t <containerid> /bin/bash
Run Code Online (Sandbox Code Playgroud)
并检查了profile_form.html,确定第3行仍然存在.
除非我遗漏了一些完全明显的东西,否则这告诉我,我对docker-compose构建的理解是不正确的.我认为docker-compose构建将能够确定"是''''目录中存在代码更改",然后重建容器.
n2o*_*n2o 16
在每次更改代码时,无需重建用于开发的docker镜像.这将花费太多时间.但是因为你正在开发django而且我认为你正在使用django(python manage.py runserver)附带的dev-server ,你可以直接将你的新代码更改发送到你的容器,并让dev-server热插入代码,就像你习惯的那样当您在本地计算机上开发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/
Run Code Online (Sandbox Code Playgroud)
ADD . /code/最初将您的本地代码复制到容器中.这是您第一次构建映像时应用程序的初始状态.但我们不希望在每次代码更改时构建映像,因为这需要几分钟.您正在使用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
Run Code Online (Sandbox Code Playgroud)
我为代码重新加载标记了重要的一行.此行确保本地计算机上的每个更改也反映在容器内.dev-server runserver识别本地代码更改并重新启动Web服务器,这只需几秒钟.
这是在docker容器中使用django应用程序的方法.
docker-compose start使用代码中的错误行启动旧图像的旧容器.您需要使用新图像创建新容器.对于这种情况是命令docker-compose up.从文档的docker-compose start:
用法:start [SERVICE ...]
启动服务的现有容器.
当然,您可以删除旧容器docker-compose rm.这只会删除您的容器,而不是图像.
| 归档时间: |
|
| 查看次数: |
4361 次 |
| 最近记录: |