簡體   English   中英

將本地文件傳輸到 docker 容器 - docker COPY 未使用目錄中的新文件進行更新

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

我從托管 Django 應用程序的同一台服務器托管媒體文件。有時我需要添加更多文件以從應用程序提供服務,例如圖像。

我已經設置了 NGINX 在我的 docker 容器內名為 /mediafiles 的目錄中提供我所有的媒體文件,這是用戶上傳的所有圖像所在的同一個地方。

我想要做的是將一些文件添加到我的存儲庫中,並將這些文件復制到容器中的 /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:

好吧,沒關系。 現在,當我嘗試以下操作時,它工作正常,不知道我第一次做錯了什么......,

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:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM