Монтаж каталога из родительской системы в контейнер в Docker

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

5 ответов


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

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

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

    tar -C / -c . | docker import - entend/custombase
    
  2. импортируйте корневую файловую систему начальной загрузки, например, результат запуска "debootstrap". (Заметить что вот как был создан официальный "базовый" образ, поэтому вам может быть лучше просто запустить "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.

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


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

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

docker run -v /tmp:/root myImage

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

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


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

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

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


этой и возможно в 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