![](/img/trans.png)
[英]Django collectstatic Permission denied with docker-compose
[英]Volume changes not persistent after “docker-compose run” command (Django's collectstatic)
我有一個用Docker Compose創建的Django環境,我正在嘗試使用manage.py collectstatic
將我站點的靜態文件復制到容器中的目錄。 這個目錄(/ usr / src / app / static)也是一個Docker Volume。
在構建我的docker容器( docker-compose build
)之后,我運行了docker-compose run web python manage.py collectstatic
,它按預期工作,但我的Web服務器(Nginx)找不到文件,當我沒有任何文件時運行docker-compose run web ls -la /usr/src/app/static
。
關於我做錯了什么的任何想法?
(注意:我的Dockerfile中沒有manage.py collectstatic
,因為我的設置需要加載我的“.env”文件,我沒有看到在Dockerfile中加載它的方法。在任何一種情況下,我都想知道為什么Docker Compose不起作用,因為我期待它。)
這是我的配置文件:
## 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
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"
## Dockerfile:
FROM python:3.4.3
RUN mkdir /code
WORKDIR /code
ADD . /requirements/ /code/requirements/
RUN pip install -r /code/requirements/docker.txt
ADD . /code/
運行docker-compose run ...
啟動一個新容器並在那里執行命令。 然后當你運行docker-compose up
它會創建另一個新的容器...它沒有你上一個命令的更改。
您要做的是啟動一個數據容器來保存靜態文件。 將另一個容器添加到您的撰寫文件中,如下所示...
web-static:
build: .
volumes:
- /usr/src/app/static
env_file: .env
command: manage.py collectstatic
並將web-static添加到nginx容器的'volumes-from'列表中
除了Paul Becotte的方法之外,還有其他幾種方法可以做到這一點:
答:隨着docker-compose v 1.6的發布(在Paul回答時不可用),您現在可以使用docker-compose文件版本2來指定卷
version: '2'
volumes:
django-static:
driver: local
django:
...
volumes:
- django-static:/usr/src/app/static
然后你可以在一個單獨的容器中收集靜態文件,它們將保持不變
docker-compose run django ./manage.py collectstatic
使用此方法應該比Pauls的方法涉及更少的系統開銷,因為您運行的容器少了一個。
B.輕微破解 - 您可以在容器命令中收集靜態文件
django:
command: bash -c "./manage.py collectstatic --noinput;
/usr/local/bin/gunicorn myapp.wsgi:application -w 2 -b :8000 --reload"
這樣做的缺點是,如果你從docker-compose命令行調用另一個命令,那么它就不靈活了,那么collectstatic將無法運行。 此外,當您可能不需要時,您正在運行collectstatic文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.