【发布时间】:2022-01-03 19:40:04
【问题描述】:
我从托管 Django 应用程序的同一台服务器托管媒体文件。有时我需要添加更多文件以从应用程序提供服务,例如图像。
我已经设置好,NGINX 将我的所有媒体文件放在我的 docker 容器内一个名为 /mediafiles 的目录中,这是用户上传的所有图像所在的同一个地方。
我想要做的是将一些文件添加到我的 repo 中,并将这些文件复制到容器中的 /mediafiles,并且能够通过应用程序(在本地运行时)或 NGINX(在我的服务器)。
但是,我遇到了一些问题。我在 Dockerfile 中尝试了以下行:
COPY ./reponame/mediafiles $APP_HOME/mediafiles
哪个有效,但只有在我运行之后:
docker system prune --volumes
这不是我可以在服务器上执行的操作,因为这是所有用户上传的图片所在的位置。我知道这不是最佳设置,因为您应该为用户媒体使用外部文件存储,但这是我目前可以在我的项目上花费的,并且还没有找到低于 10 美元的良好存储解决方案每个月。
我尝试运行以下命令来不必执行完整的系统修剪,但没有任何成功 - Docker 无法识别本地添加/删除的文件来更新容器。
docker-compose up --build --force-recreate
docker-compose build --no-cache
docker-compose up --build
docker builder prune
我也考虑将我的本地“媒体文件”安装到 docker-compose 文件中的容器中,但这不起作用,而且我不建议这样做,因为我理解的是覆盖文件的冲突容器,即类似这样的东西:
- ./reponame/mediafiles:/home/kontorshund/web/mediafiles
所以我对如何继续解决这个问题有点没有任何想法,非常感谢对如何解决这个问题的 Docker 机制有更多了解的人。
完整的 Dockerfile
# pull official base image
FROM python:3.9.6
# set work directory
WORKDIR /usr/src/reponame
# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
# install dependencies
RUN pip install --upgrade pip
COPY ./requirements.txt .
RUN pip install -r requirements.txt
# create the appropriate directories
RUN mkdir -p /home/reponame
ENV HOME=/home/reponame
ENV APP_HOME=/home/reponame/web
RUN mkdir $APP_HOME
RUN mkdir $APP_HOME/staticfiles
RUN mkdir $APP_HOME/mediafiles
WORKDIR $APP_HOME
COPY ./reponame/mediafiles $APP_HOME/mediafiles
COPY . $APP_HOME
完整的 docker-compose 文件
version: '3.8'
services:
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/home/reponame/web
- static_volume:/home/reponame/web/staticfiles
- media_volume:/home/reponame/web/mediafiles
ports:
- 8000:8000
env_file:
- ./.env.dev
volumes:
static_volume:
media_volume:
【问题讨论】:
-
该文件夹当前是您的撰写文件或图像定义中的卷吗?
-
请显示您的 docker-compose 文件的全部内容
-
@andrzejwp 我已经添加了文件的内容
标签: django docker docker-compose docker-volume