将本地文件传输到 docker 容器 - docker COPY 不更新目录中的新文件

Transfering local files to docker container - docker COPY not updating with new files in directory

我在托管 Django 应用程序的同一台服务器上托管我的媒体文件。有时我需要添加更多文件以便从应用程序提供服务,例如图像。

我已经设置好让 NGINX 在我的 docker 容器内名为 /mediafiles 的目录中提供我所有的媒体文件,这是用户上传的所有图像所在的位置。

我想做的是将一些文件添加到我的存储库中,并将这些文件复制到容器中的 /mediafiles 中,并能够通过应用程序访问它们(当 运行 在本地时)或NGINX(当 运行 在我的服务器中时)。

但是,我 运行 遇到了一些问题。我在 Docker 文件中尝试使用以下行:

COPY ./reponame/mediafiles $APP_HOME/mediafiles

这有效,但只有在我 运行:

docker system prune --volumes 

这不是我可以在服务器上执行的操作,因为这是所有用户上传的图片所在的位置。我知道这不是最佳设置,因为您应该为用户媒体使用外部文件存储,但这是我目前可以在我的项目上花费的,还没有找到低于 10 美元的好的存储解决方案每月。

我已经尝试 运行宁以下命令不必执行完整的系统 p运行e,但没有任何成功 - Docker 不识别added/removed 个本地文件以更新容器。

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机制有更多了解的人如何解决这个问题。

完整Docker文件

# 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-撰写文件

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:

好的,没关系。现在,当我尝试以下操作时,它工作正常,不知道我第一次做错了什么....,

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
      - ./mediafiles:/home/reponame/web/mediafiles
      #- media_volume:/home/reponame/web/mediafiles
    ports:
      - 8000:8000
    env_file:
      - ./.env.dev

volumes:
  static_volume:
  media_volume: