Добавьте том в Docker, но исключите подпапку



предполагается, что у меня есть контейнер Docker и папка на моем хосте /hostFolder. Теперь если я хочу добавить эту папку в контейнер Docker в объем, то я могу сделать это с помощью ADD на Dockerfile или установка его в качестве Тома.



пока все хорошо.



теперь /hostFolder содержит вложенные папки, /hostFolder/subFolder.



Я хочу смонтировать /hostFolder в контейнер Docker (будь то чтение-запись или только чтение не имеет значения, работает как для меня), но я делаю не хочу, чтобы он был включен /hostFolder/subFolder. Я хочу исключить это, и я также хочу, чтобы контейнер Docker мог вносить изменения в эту подпапку, без последствий ее изменения на хосте.



это возможно? Если да, то как?

566   4  

4 ответов:

если вы хотите, чтобы подкаталоги игнорировались docker-compose, но сохранялись, вы можете сделать следующее в docker-compose.yml:

volumes:
  node_modules:
services:
  server:
    volumes:
      - .:/app
      - node_modules:/app/node_modules

это смонтирует ваш текущий каталог как общий том, но смонтирует постоянный том docker вместо вашего локального

использование docker-compose я могу использовать node_modules локально, но игнорировать его в контейнере docker, используя следующий синтаксис в docker-compose.yml

volumes:
   - './angularApp:/opt/app'
   - /opt/app/node_modules/

так что все в ./angularApp сопоставляется /opt/app и затем я создаю еще один Маунт Тома /opt/app/node_modules/ который сейчас пустой каталог - даже если в моей локальной машине ./angularApp/node_modules не пуст.

во-первых, с помощью ADD инструкция в Dockerfile - это очень отличается от использования Тома (либо через до docker run или VOLUME инструкция в Dockerfile). Элемент ADD и COPY команд, просто сделайте копию файлов в то время docker build запускается. Эти файлы не обновляются до тех пор, пока не будет создано новое изображение с помощью . Напротив, использование тома по существу говорит: "этот каталог не должен храниться в контейнере вместо этого используйте каталог на хосте"; всякий раз, когда файл внутри Тома изменяется, как хост, так и контейнер увидят его немедленно.

я не верю, что вы можете достичь того, что вы хотите, используя Тома, вам придется пересмотреть свою структуру каталогов, если вы хотите это сделать.

тем не менее, это довольно просто достичь с помощью COPY (что должно быть предпочтительнее ADD). Вы можете использовать либо .dockerignore файл для исключения подкаталога, или вы могли бы COPY все затем файлы делают RUN rm bla для удаления подкаталога.

помните, что любые файлы, которые вы добавляете к изображению с COPY или ADD должно быть внутри контекста сборки, т. е. В или под каталогом, который вы запускаете docker build из.

чтобы исключить файл, используйте следующие

volumes:
   - /hostFolder:/folder
   - /dev/null:/folder/fileToBeExcluded

Comments

    Ничего не найдено.