【发布时间】:2015-11-08 09:57:59
【问题描述】:
我正在使用 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 命令(docker-compose restart、docker-compose up),但代码不会刷新。
我错过了什么?
【问题讨论】:
-
您是否与您的代码共享卷?您可以发布部分 docker-compose.yml 以查看场景吗?
-
我不明白你的““构建”的问题是它重新运行了我所有的 pip 安装。”也许你可以先安装所有的 pip,这样
docker build只加载代码变化。你能展示你的 Dockerfile 吗?您还可以拥有一个以FROM mypipinstalls开头的 Dockerfile -
kikicarbonell,您的问题帮助我意识到我的代码需要一个卷,这似乎解决了我的问题,所以感谢您引导我找到解决方案!
-
@user2915097,虽然我认为我通过添加代码量解决了我的问题,但我很好奇你的建议。
FROM mypipinstalls将如何工作(即,与我现在所做的相比——见上文,我添加了我的配置文件)? -
对于任何后续读者,@user2915097 肯定是在参考多阶段构建。如果您要重建 docker-compose 应用程序,您可以使用它来创建不会更改的图层。但是那样只是为了重新加载代码有点过头了,我建议坚持使用共享卷。
标签: django docker gunicorn docker-compose