将本地文件传输到 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:
我在托管 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: