我有一个使用 Docker Compose 创建的 Django 环境,并且我尝试使用 manage.pycollectstatic
将站点的静态文件复制到容器中的目录。该目录(/usr/src/app/static)也是一个 Docker Volume。
构建我的 docker 容器(docker-compose build
)后,我运行 docker-compose run web python manage.pycollectstatic
,它按预期工作,但是我的 web服务器(Nginx)找不到文件,当我运行 docker-compose run web ls -la/usr/src/app/static 时也没有任何文件。
关于我做错了什么有什么想法吗?
(注意:我的 Dockerfile 中没有 manage.pycollectstatic
因为我的设置需要加载“.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”列表
关于django - "docker-compose run"命令后卷更改不持久(Django 的collectstatic),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32030360/