“docker-compose run”命令后卷更改不持久(Django 的collectstatic)

2024-05-25

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

构建我的 docker 容器后(docker-compose build),我跑docker-compose run web python manage.py collectstatic,它按预期工作,但是我的网络服务器(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/

Running 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”列表中

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

“docker-compose run”命令后卷更改不持久(Django 的collectstatic) 的相关文章

随机推荐