关于使用docker-compose卷服务Django静态文件的困惑

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误解了。对我在做什么错有任何想法吗?我的理解是RUNSECRET_KEY=tmpkey python manage.py collectstatic--noinput应该将文件写入我的本地.static文件夹,并且nginx应该看到这些文件;都没有发生。

软件版本:docker-compose版本1.7.0,内部版本0d7bf73和Docker 1.11.0版本,在OSX上内部版本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-compose卷服务Django静态文件的困惑 的全部内容, 来源链接: utcz.com/qa/402796.html

回到顶部