Подключить том к образу Docker в OSX

Как на Mac подключить том к контейнеру Docker?

На моем Linux-боксе это легко. Все, что мне нужно сделать, это что-то вроде -v /src/webapp:/opt/webapp при запуске контейнера. Но Mac отличается, так как мне нужно запустить boot2docker, чтобы запустить виртуальную машину в VirtualBox. я пробовал бегать

boot2docker init
boot2docker up
boot2docker ssh # to poke around
boot2docker stop
VBoxManage sharedfolder add "boot2docker-vm" --name "Users" --hostpath /Users
boot2docker up
boot2docker ssh "sudo modprobe vboxsf"

но я получаю

modprobe: module vboxsf not found in modules.dep

Если я проигнорирую это и все же попытаюсь смонтировать на виртуальной машине вот так

boot2docker ssh "sudo mkdir /test && sudo mount -t vboxsf Users /test"

я получил

mount: mounting Users on /test failed: No such device

Я чувствую, что мне не хватает чего-то очень простого, но я не могу понять это. Любая помощь будет принята с благодарностью.


person geowa4    schedule 13.10.2014    source источник
comment
возможный дубликат Boot2Docker на Mac — доступ к локальным файлам   -  person    schedule 24.10.2014


Ответы (2)


Хорошо, покопавшись в PR GitHub, я смог найти способ сделать это. Для будущих читателей этот процесс должен быть исправлен в следующем выпуске boot2docker.

# assuming boot2docker and VirtualBox are installed
wget http://static.dockerfiles.io/boot2docker-v1.2.0-virtualbox-guest-additions-v4.3.14.iso
mv boot2docker-v1.2.0-virtualbox-guest-additions-v4.3.14.iso ~/.boot2docker/boot2docker.iso
# blow away your old boot2docker-vm if it exists (boot2docker down && boot2docker destroy)
boot2docker init
boot2docker up
# set DOCKER_HOST as instructed
boot2docker stop
VBoxManage sharedfolder add boot2docker-vm --name /Users --hostpath /Users
boot2docker up
# if you ssh into the VM now, you'll notice /Users is present, but empty; I don't know/care why.
boot2docker ssh "sudo mount -t vboxsf -o uid=1000,gid=50 /Users /Users"
# done

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

EDIT: boot2docker 1.3.0 поддерживает это без каких-либо дополнительных изменений. После обновления я выполнил следующие команды:

boot2docker destroy  # start over
boot2docker download # download the udpated ISO
boot2docker init
boot2docker up
# done
person geowa4    schedule 15.10.2014
comment
Версия boot2docker, выпущенная вчера, автоматически смонтирует ваш каталог /Users. - person klochner; 17.10.2014
comment
Спасибо, я отредактировал этот ответ, чтобы отразить обновления. - person geowa4; 18.10.2014
comment
Зачем это нужно, если Docker для Mac предоставляет общий доступ к файлам в настройках? Мне не удалось заставить их работать, но я предполагаю, что они предназначены для обеспечения этой функциональности? Документы ничего не говорят об этом. - person geoidesic; 26.03.2018

Для людей, которые найдут это в будущем и захотят монтировать что-либо, кроме /Users, есть скрипт, который кто-то сделал как суть на github, который делает весь процесс за вас, и это здорово. Просто используйте это. Это избавило меня от головной боли, связанной с необходимостью возиться с виртуальным боксом. Это проверено с Docker 1.3.0 на моем Mac с Yosemite.

ИЗМЕНИТЬ:

Теперь, когда docker-machine cli устарел в пользу docker-machine, вот как вы можете сделать это с помощью docker-machine:

Во-первых, подключитесь по ssh к виртуальной машине docker-machine и создайте папку, в которую мы будем отображать:

docker-machine ssh $MACHINE_NAME "sudo mkdir -p \"$VOL_DIR\""

Теперь поделитесь папкой с VirtualBox:

WORKDIR=$(basename "$VOL_DIR")
vboxmanage sharedfolder add "$MACHINE_NAME" --name "$WORKDIR" --hostpath "$VOL_DIR" --transient

Наконец, снова подключитесь к докер-машине по ssh и смонтируйте папку, которой мы только что поделились:

docker-machine ssh $MACHINE_NAME "sudo mount -t vboxsf -o uid=\"$U\",gid=\"$G\" \"$WORKDIR\" \"$VOL_DIR\""

Примечание: для UID и GID вы можете использовать любые целые числа, если они еще не заняты.

Это проверено на docker-machine 0.4.1 и docker 1.8.3 на OS X El Capitan.

person Eli    schedule 18.12.2014