在"docker-compose run"命令(Django的collectstatic)之后,卷更改不会持久

Dol*_*cci 4 django docker docker-compose

我有一个使用Docker Compose创建的Django环境,我正在尝试manage.py collectstatic将我的站点的静态文件复制到容器中的目录.这个目录(/ usr/src/app/static)也是一个Docker Volume.

在构建我的docker containers(docker-compose build)之后,我运行docker-compose run web python manage.py collectstatic,它按预期工作,但我的Web服务器(Nginx)没有找到文件,我运行时也没有任何文件docker-compose run web ls -la /usr/src/app/static.

关于我做错了什么的任何想法?

(注意:manage.py collectstatic我的Dockerfile中没有,因为我的设置需要加载我的".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/
Run Code Online (Sandbox Code Playgroud)

Pau*_*tte 6

运行docker-compose run ...启动一个新容器并在那里执行命令.然后当你运行docker-compose up它时创建另一个新容器......它没有你上一个命令的更改.

您要做的是启动一个数据容器来保存静态文件.将另一个容器添加到您的撰写文件中,如下所示...

web-static:
  build: .
  volumes:
    - /usr/src/app/static
  env_file: .env
  command: manage.py collectstatic
Run Code Online (Sandbox Code Playgroud)

并将web-static添加到nginx容器的'volumes-from'列表中