当前位置: 首页 > 面试题库 >

使用Gunicorn在Docker中进行Django开发时自动重新加载代码更改

向子安
2023-03-14
问题内容

我正在使用Docker容器进行Django开发,并且该容器与Nginx一起运行Gunicorn。我希望代码更改能够自动加载,但我可以加载它们的唯一方法是使用docker-
compose(docker-compose build)进行重建。“构建”的问题在于它会重新运行我所有的pip安装。

我正在使用Gunicorn --reload标志,这显然应该可以完成我想要的操作。这是我的Docker配置文件

## Dockerfile:
FROM python:3.4.3
RUN mkdir /code
WORKDIR /code
ADD . /code/
RUN pip install -r /code/requirements/docker.txt

## docker-compose.yml:
web:
  restart: always
  build: .
  expose:
    - "8000"
  links:
    - postgres:postgres
  volumes:
    - /usr/src/app/static
  env_file: .env
  command: /usr/local/bin/gunicorn myapp.wsgi:application -w 2 -b :8000 --reload

nginx:
  restart: always
  build: ./config/nginx
  ports:
    - "80:80"
  volumes:
    - /www/static
  volumes_from:
    - web
  links:
    - web:web

postgres:
  restart: always
  image: postgres:latest
  volumes:
    - /var/lib/postgresql
  ports:
    - "5432:5432"

我已经尝试了一些其他的泊坞窗命令(的docker-compose restartdocker-compose up),但代码不会刷新。

我想念什么?


问题答案:

感谢kikicarbonell,我研究了代码量,在查看了Docker
Compose建议的Django设置之后
,我volumes: - .:/code在docker-compose.yml中添加了我的Web容器,现在我所做的所有代码更改都自动应用。

## docker-compose.yml:
web:
  restart: always
  build: .
  expose:
    - "8000"
  links:
    - postgres:postgres
  volumes:
    - /usr/src/app/static
    - .:/code
  env_file: .env
  command: /usr/local/bin/gunicorn myapp.wsgi:application -w 2 -b :8000 --reload

更新:
有关在Docker上使用Gunicorn和Django的详尽示例,请从Rackspace检出此示例项目,该项目还显示了如何使用docker-
machine在Rackspace Cloud等远程服务器上启动设置。

注意: 当前,当您的代码位于本地且Docker主机位于远程(例如,在诸如Digital
Ocean或Rackspace之类的云提供商上)时,此方法不起作用。如果本地文件系统未安装在VM上,则这也适用于虚拟机。请注意,有单独的卷驱动程序(例如,flocker),
可能 有一些东西可以满足这种需求。 现在,“修复”是将您的文件rsync / scp到远程docker主机上的目录。
然后, --reload执行任何scp / rsync操作后,该标志会自动重新加载gunicorn。
更新:
如果推送代码以删除Docker主机,我发现重建Docker容器(例如docker-compose build web && docker-compose up -d)要容易得多。如果您的src文件夹很大,这可能比rsync方法要慢。



 类似资料:
  • 问题内容: 最后,我将开发环境从runserver迁移到gunicorn / nginx。 将runserver的自动重载功能复制到gunicorn会很方便,因此当源更改时,服务器会自动重新启动。否则,我必须使用手动重新启动服务器。 有什么方法可以避免手动重启? 问题答案: 尽管这是一个老问题,但您需要知道自19.0版以来就可以选择。因此,现在不需要第三方工具。

  • 问题内容: 最后,我将开发环境从runserver迁移到gunicorn / nginx。 将runserver的自动重载功能复制到gunicorn会很方便,因此当源更改时,服务器会自动重新启动。否则,我必须使用手动重新启动服务器。 有什么办法可以避免手动重启? 问题答案: 尽管这是一个古老的问题,但仅出于一致性考虑-因为19.0版本的gunicorn可以–reload选择。因此,不再需要第三方工

  • 问题内容: 目前看来,对于sails.js应用程序中的任何代码更改,您都必须手动停止sails服务器并再次运行,然后才能看到更改。 我想知道在开发模式下运行时是否有任何方法可以在检测到代码更改时自动重新启动sails服务器? 问题答案: 您必须使用forever,nodemon或其他类似的观察器。 通过运行以下命令 永久 安装: 运行: 为了避免由于Sails写入文件夹而导致无限重启,您可以在项目

  • 问题内容: 我正在研究如何使用Python开发一个不错的Web应用程序。由于我不希望遇到一些高级结构,因此我的选择落在了轻量级的Flask框架上。时间会证明这是否是正确的选择。 因此,现在我已经使用mod_wsgi设置了Apache服务器,并且我的测试站点运行正常。但是,我想通过使我对py或模板文件进行的任何更改自动重新加载网站,从而加快开发流程。我看到站点的.wsgi文件中的任何更改都会导致重新

  • 我在docker容器中开发了一个烧瓶应用程序。我的代码的一个最小示例具有以下结构: 我把这个例子做得更简单(见第二次编辑) flask-app/dockerfile flask-app/src/__init__.py flask-app/dockerfile flask-app/dockerfile docker-compose.yml

  • 我正在用spring Boot2开发一个应用程序。我在docker中部署了应用程序,并激活了“使用spring DevTools在docker中自动重新加载”,但在添加spring-security后,自动重新加载不再起作用。触发自动重新启动时出现错误: