【问题标题】:how docker-compose populate volumes?docker-compose 如何填充卷?
【发布时间】:2022-06-15 21:52:01
【问题描述】:

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

然后我放入容器的卷 /app/media 文件夹。

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

因此,我想知道 docker 是如何填充音量的?难道不应该将容器文件夹中的新文件检入并放入卷中吗?

我首先遇到了问题,它是 .dockerignore 文件中的 /media 文件夹,但现在它再次使用 /media 文件夹中的其他文件进行此操作

谢谢

这是我的 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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2019-06-03
      • 2020-03-03
      • 1970-01-01
      • 2022-08-04
      • 2017-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-28
      相关资源
      最近更新 更多