如何获得docker-compose填充旧卷?



我正在运行一个docker容器,我将/app中当前文件夹的内容复制到容器中。

然后放入容器的volume/app/media文件夹

然而,当卷已经从以前的docker-compose构建中创建时,我找不到所有放在我的。/media文件夹中的新文件,应该复制到容器中的/app/media…

因此我想知道docker是如何填充卷的?它不应该在容器文件夹中检查新文件并将它们放入卷中吗?

我首先遇到了这个问题,它是。dockerignore文件中的/media文件夹,但现在它又在/media文件夹

中的其他文件中这样做了在Docker中添加数据到现有命名卷的正确方法是什么?我试着做:

docker run -v mediafiles:/data --name helper busybox true
cd ./media && docker cp . helper:/data
docker rm helper

它现在正在工作

谢谢

这是我的docker-compose.yml

version: '3.7'
services:
nginx:
build:
context: .
dockerfile: ./compose/production/nginx/Dockerfile
restart: always
ports:
- 80:80
depends_on:
- backend
- frontend
volumes:
- staticfiles:/app/static
- mediafiles:/app/media
networks:
spa_network:
frontend:
build:
context: .
dockerfile: ./compose/production/frontend/Dockerfile
restart: always
stdin_open: true
command: yarn start
ports:
- 3000:3000
depends_on:
- backend
networks:
spa_network:
ipv4_address: 172.20.128.3
backend:
build:
context: .
dockerfile: ./compose/production/django/Dockerfile
restart: always
command: /start
volumes:
- staticfiles:/app/static
- mediafiles:/app/media
- sqlite_db:/app/db  
ports:
- 8000:8000
env_file:
- ./env/prod-sample
networks:
spa_network:
ipv4_address: 172.20.128.2
networks:
spa_network:
ipam:
config:
- subnet: 172.20.0.0/16
volumes:
sqlite_db:
staticfiles:
mediafiles:

这是我的dockerfile后端(在那里我找不到/app/media文件)

FROM python:3.8-slim-buster
ENV PYTHONUNBUFFERED 1
RUN apt-get update 
# dependencies for building Python packages
&& apt-get install -y build-essential netcat 
# psycopg2 dependencies
&& apt-get install -y libpq-dev 
# Translations dependencies
&& apt-get install -y gettext 
# cleaning up unused files
&& apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false 
&& rm -rf /var/lib/apt/lists/*
RUN addgroup --system django 
&& adduser --system --ingroup django django
# Requirements are installed here to ensure they will be cached.
COPY ./requirements.txt /requirements.txt
RUN pip install -r /requirements.txt
#COPY ./compose/production/django/entrypoint /entrypoint
#RUN sed -i 's/r$//g' /entrypoint
#RUN chmod +x /entrypoint
#RUN chown django /entrypoint
COPY ./compose/production/django/start /start
RUN sed -i 's/r$//g' /start
RUN chmod +x /start
RUN chown django /start
WORKDIR /app
# avoid 'permission denied' error
# copy project code
COPY . .
RUN chown -R django:django /app

#USER django
#ENTRYPOINT ["/entrypoint"]

如果卷是新的,那么docker会将映像中的任何文件复制到新卷中。如果该卷不是新的,则不会复制任何内容,您将获得该卷中现有的旧内容。

更多信息在这里:https://docs.docker.com/storage/volumes/#populate-a-volume-using-a-container

最新更新