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

我正在使用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方法要慢。

以上是 使用Gunicorn在Docker中进行Django开发时自动重新加载代码更改 的全部内容, 来源链接: utcz.com/qa/423715.html

回到顶部