[英]Confusion on using docker-compose volumes to serve django static files
Docker菜鸟在这里,尝试使用Compose设置一个简单的Django项目。 过去 ,我已经在此方面取得了成功 ,但是这次我正在尝试一种不同的设置,但我不知道为什么它不起作用。
我有以下docker-compose.yml文件:
data:
image: postgres:9.4
volumes:
- /var/lib/postgresql
command: /bin/true
db:
image: postgres:9.4
restart: always
expose:
- "5432"
volumes_from:
- data
app:
build: .
restart: always
env_file: .env
expose:
- "8000"
links:
- db:db
volumes:
- .static:/static_files
web:
build: docker/web
restart: always
ports:
- "80:80"
links:
- app:app
volumes_from:
- app
我的/ Dockerfile是:
FROM python:3.5
ENV PYTHONUNBUFFERED 1
ADD . /app
WORKDIR /app
RUN pip install -r requirements.txt
RUN SECRET_KEY=tmpkey python manage.py collectstatic --noinput
CMD gunicorn mysite.wsgi:application -b 0.0.0.0:8000
我的/ docker / web / Dockerfile是:
FROM nginx:1.9
RUN rm /etc/nginx/conf.d/default.conf
ADD default.conf /etc/nginx/conf.d/
我的/docker/web/default.conf文件是:
server {
listen 80 default_server;
location /static/ {
autoindex on;
alias /static_files/;
}
location / {
proxy_pass http://app:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
docker的输出显示了安装到/ static_files中的静态文件,但是nginx为/ static下的所有文件返回404。 如果我查看.static文件夹(位于项目的根目录),则该目录为空(除了那里的.gitkeep文件之外)。 如果我运行docker-compose app run ls -la /static_files
,则目录为空,但是docker-compose app run ls -la /app/.static
具有.gitkeep文件。 显然,我对Docker和Compose误解了。 对我在做什么错有任何想法吗? 我的理解是, RUN SECRET_KEY=tmpkey python manage.py collectstatic --noinput
应该将文件写入本地.static文件夹,而nginx应该看到这些文件; 都没有发生。
软件版本:docker-compose版本1.7.0,内部版本0d7bf73和Docker 1.11.0版本,在OS X上内部版本4dc5990,并且docker-machine连接到云实例。
我仍然不清楚为什么我的原始代码不起作用,但是我可以将代码切换为使用Compose的v2格式,但我可以在服务之外定义卷。
这是我更新的docker-compose.yml文件:
version: '2'
services:
db:
image: postgres:9.4
restart: always
expose:
- "5432"
volumes:
- postgres-data:/var/lib/postgresql
app:
build: .
restart: always
env_file: .env
expose:
- "8000"
links:
- db:db
volumes:
- static-data:/static_files
web:
build: docker/web
restart: always
ports:
- "80:80"
links:
- app:app
volumes:
- static-data:/static_files
volumes:
postgres-data:
driver: local
static-data:
driver: local
其余的配置文件保持不变。
(可能值得注意的是,在我运行此新配置之前,我删除了Docker卷docker volume ls
列出的所有现有Docker卷-也许这是我的实际解决方法?)
我偶然发现了这个问题,因为在部署Docker Compose安装程序后,我的静态文件不会更新。
删除所有Docker卷是有帮助的-正如Dolan在回答的结尾建议的那样。 我的静态文件在运行后已更新:
docker volume prune
当然,这会删除卷及其内容,因此请小心!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.