【问题标题】:Transfering local files to docker container - docker COPY not updating with new files in directory将本地文件传输到 docker 容器 - docker COPY 未使用目录中的新文件进行更新
【发布时间】: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


【解决方案1】:

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

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:

【讨论】:

    猜你喜欢
    • 2020-09-30
    • 2020-06-05
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 2021-06-09
    • 2021-09-30
    • 1970-01-01
    • 2020-03-26
    相关资源
    最近更新 更多