Добавьте том в Docker, но исключите подпапку
предполагается, что у меня есть контейнер Docker и папка на моем хосте /hostFolder. Теперь если я хочу добавить эту папку в контейнер Docker в объем, то я могу сделать это с помощью ADD на Dockerfile или установка его в качестве Тома.
пока все хорошо.
теперь /hostFolder содержит вложенные папки, /hostFolder/subFolder.
Я хочу смонтировать /hostFolder в контейнер Docker (будь то чтение-запись или только чтение не имеет значения, работает как для меня), но я делаю не хочу, чтобы он был включен /hostFolder/subFolder. Я хочу исключить это, и я также хочу, чтобы контейнер Docker мог вносить изменения в эту подпапку, без последствий ее изменения на хосте.
это возможно? Если да, то как?
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.ymlvolumes: - './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