Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Docker for django开发自动更新_Python_Django_Docker - Fatal编程技术网

Python Docker for django开发自动更新

Python Docker for django开发自动更新,python,django,docker,Python,Django,Docker,使用的软件: Django 2.2.7 Docker 19.03.4社区 OS=Ubuntu 18.04 我来自一个流浪者的背景,在此之前,我建立了一个环境,在这个环境中,我基本上有一个看起来很像的virtualenv,但在一个虚拟机中。就是说,;我启动了vagrant机器,并使用资源调配安装了所有必需的软件包和需求。然后在我的主机上安装了Eclipse并找到了django项目。对我来说,最后一步是使用共享资源将它们绑定在一起。通过这种方式,我确保始终拥有最新的代码 对于那些不熟悉Djang

使用的软件:

  • Django 2.2.7
  • Docker 19.03.4社区
  • OS=Ubuntu 18.04
我来自一个流浪者的背景,在此之前,我建立了一个环境,在这个环境中,我基本上有一个看起来很像的virtualenv,但在一个虚拟机中。就是说,;我启动了vagrant机器,并使用资源调配安装了所有必需的软件包和需求。然后在我的主机上安装了Eclipse并找到了django项目。对我来说,最后一步是使用共享资源将它们绑定在一起。通过这种方式,我确保始终拥有最新的代码

对于那些不熟悉Django的人;默认情况下,runserver命令被设置为侦听代码更改,并在浏览器中立即反映更改的每个更改上“重新启动”(不是真的)

在虚拟机内部,我将运行“runserver”命令,从而能够以这种方式进行开发

现在使用docker(我必须将一些软件绑定在一起,并最终使用docker进行部署),我尝试在某种程度上复制这种情况。我使用一个基于python-3.7.5-stretch的简单Dockerfile启动并运行了django docker。容器和django本身一样运行良好,但是代码现在已经内置(因为没有更好的词)。这当然是由于文件中的“复制”命令:

FROM python:3.7.5-stretch

ADD requirements.txt requirements.txt
RUN pip install -r requirements.txt

RUN mkdir /app
WORKDIR /app

ADD . /app/

ENV PYTHONUNBUFFERED 1
ENV LANG C.UTF-8
ENV DEBIAN_FRONTEND=noninteractive

# install environment dependencies
RUN pip3 install --upgrade pip

EXPOSE 8000
EXPOSE 8280

CMD ["python", "manage.py", "makemigrations"]
CMD ["python", "manage.py", "migrate"]
CMD ["python", "/app/manage.py", "runserver", "0.0.0.0:8000"]

这意味着为了在每次更改时更新代码,我需要构建映像并重新运行服务器。考虑到我每分钟要做多次,这似乎是一个巨大的过度消耗

我知道卷,但它们似乎安装在容器级别,而不是映像级别。实际上,这意味着所有命令都将在手动初始化后运行。但在此之前,容器将停止

长话短说:如果可能的话,我可以做些什么来模拟类似流浪汉的情况,即代码将由容器自动读取(或推送)


TLDR:我希望我可以在docker中实时更新django代码,而无需持续重建图像。有什么选择吗?

我在评论中的链接是错误的。我想把这联系起来。给定的解决方案可能比您的卷解决方案简单一些

如果您有一个图像,并大致通过以下命令启动它:

$ docker run --rm -it <image_name>

文件更改现在应该重新启动容器中的Django服务器。

尝试使用中所述的
--mount
选项。@ikkuh:这似乎可以解决问题。我必须在docker文件中创建一个卷,然后在docker运行时装载该卷。然后我创建了命名卷,将_数据文件夹与我自己的开发存储库进行符号链接,并运行服务器。有点复杂,但它似乎有效。你能把你的评论变成一个答案,这样我就可以把它标记为正确的吗?把这个标记为正确的答案,因为它工作完美无瑕。我也可以在其他软件中使用同样的技术,这是很有用的。Windows中还不支持这种技术,如果我错了,请纠正我。围绕这一点提出了许多问题。
$ docker run --rm -it --mount src="$(pwd)",target=/app,type=bind <image_name>