Каталог монтирования из родительской системы в контейнер в докере


Как подключить каталог из родительской системы к контейнеру в Docker?

5 53

5 ответов:

*обновление-см. ответ ниже. это уже не правильный ответ *

вы не можете монтировать их по дизайну, потому что Docker больше не может гарантировать повторяемую среду выполнения.

вы можете:
  1. импортируйте корневую файловую систему хоста и создайте из нее новый образ:

    tar -C / -c . | docker import - entend/custombase
    
  2. импортировать загрузки корневой файловой системы, например в результате выполнения 'ядро'. (Заметить что вот как был создан официальный "базовый" образ, поэтому вам может быть лучше просто запустить "docker pull base")

    debootstrap precise ./bootstrap
    tar -C ./bootstrap -c . | docker import - entend/ubuntubase
    
  3. введите содержимое локального каталога в контейнер при его запуске.

    IMAGE=base; SRC=./stuff; DST=/tmp/stuff; CMD="echo hello world"; tar -C $src -c . | docker run $IMAGE -i /bin/sh -c "tar -C $DST -x; $CMD"
    

    это запустит контейнер из $IMAGE, скопируйте каталог хоста $SRC в каталог контейнера $DST, а затем запустите команду $CMD.

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

просто в качестве заключительного обновления, эта функция в настоящее время выпущен в Докер (хотя этот API изменилось с просьбой вытащить связывают @imiric).

просто используйте команду

docker run -v /tmp:/root myImage

для того чтобы /tmp с главной машины как /root внутри изображения.

Источник:https://docs.docker.com/engine/userguide/dockervolumes/

просто чтобы обновить этот вопрос, это скоро будет возможно в Docker.

это тянуть запрос фактически реализовал эту функцию и вскоре будет объединен с мастером.

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

этой и возможно в Docker:

монтировать данные в контейнер приложения:

docker run -t -i -rm -volumes-from DATA -name client1 ubuntu bash

трюк для OS X и Windows

два последовательных монтирования: я думаю, что многие сообщения здесь могут использовать два boot2docker. причина, по которой вы ничего не видите, заключается в том, что вы монтируете каталог из boot2docker, а не с вашего хоста. Вам в основном нужны два последовательных монтирования: первое для подключения каталога с вашего хоста к вашей системе, а второе для подключения нового каталога из boot2docker к вашему контейнеру следующим образом:

  1. установите локальную систему дальше boot2docker:

    sudo mount -t vboxsf hostfolder /boot2dockerfolder
    
  2. смонтировать файл boot2docker в контейнере Linux

    docker run -v /boot2dockerfolder:/root/containerfolder -i -t imagename
    

тогда, когда вы делаете ls внутри containerfolder вы увидите содержимое вашего hostfolder