Ручное совместное использование каталога в качестве точки монтирования тома докера в OSX

Согласно этому руководству с веб-сайта docker, Когда вы запускаете контейнер, он автоматически делится вашим /Users/username.

Моя текущая проблема:

Но в моей школе мой $HOME не находится в /Users, и когда я пытаюсь напрямую смонтировать тома в своем контейнере с помощью чего-то вроде docker run -d -P -v $HOME/site:/usr/share/nginx/html --name mysite nginx (например, учебник по ссылке), я не могу изменить файлы через смонтированный том. Итак, я предполагаю, что мой $HOME не передается автоматически.

Но если я запускаю docker instpect mysite, я получаю:

"HostConfig": {
    "Binds": [
        "/nfs/zfs-student-3/users/vmonteco/site:/usr/share/nginx/html"
    ],

и

"Mounts": [
    {
        "Source": "/nfs/zfs-student-3/users/vmonteco/site",
        "Destination": "/usr/share/nginx/html",
        "Mode": "",
        "RW": true,
        "Propagation": "rprivate"
    } 

Мой вопрос заключается просто в следующем:

Как я могу вручную поделиться каталогами с докером размещения ВМ (здесь — virtualbox), чтобы использовать его в качестве точек подключения тома?

Вот как я сделал это с Boot2docker до того, как он устарел:

С boot2docker я мог бы запустить что-то вроде:

SHAREDIR=$HOME/share
# creating share folder.
mkdir $SHAREDIR

# mount shared folder while relaunching boot2docker :
boot2docker --vbox-share="$SHAREDIR=share" up
echo "Creating and mounting \"share\" directory in boot2docker VM."
boot2docker ssh "sudo mkdir /share; sudo mount -t vboxsf share /share"

# running the container :
docker run  -ti --rm -v /share:/share -v /Users:/Users base/archlinux sh

И это работало нормально.

Но теперь boot2docker устарел, и я не нашел, как это сделать с виртуальной машиной, которую я должен использовать сейчас (она использует виртуальный бокс).

Если я правильно понимаю, это должно работать так же, как работал boot2docker:

                       1                                                  2
[directory from OSX] <===> [VM directory (the VM replaces Boot2docker)] <===> [container directory]

Если я все еще хорошо понимаю, единственное, что сейчас не работает, это точка [1], это было обработано средней частью небольшого скрипта, которым я только что поделился с boot2docker.

Но что я мог сделать сейчас?


person vmonteco    schedule 17.02.2016    source источник


Ответы (2)


См. этот ответ: https://stackoverflow.com/a/32030385/2434234

Подводя итог: Начиная с версии docker 1.8, вы можете добавлять каталоги через vbox cli.

VBoxManage sharedfolder add <machine name/id> --name <mount_name> --hostpath <host_dir> --automount
person Nick Humrich    schedule 17.02.2016
comment
Это сработало :) спасибо! Я на самом деле обнаружил, что это работает почти так же. Я взял на себя смелость добавить свой новый сценарий к вашему ответу. - person vmonteco; 22.02.2016

Я новичок в докере, и я хочу узнать больше об этом удивительном инструменте, который можно запустить в производство в компании, в которой я работаю, однако я пытаюсь повысить производительность при разработке своих веб-систем. Таким образом, я хочу поделиться файлами своего веб-приложения, хранящимися в локальной папке OSX, с моими контейнерами, работающими в NGINX, чтобы их можно было легко тестировать одновременно без потери времени. Затем я нашел решение в Интернете, которое я подробно расскажу вам ниже.

Сначала откройте приложение Virtual Box, щелкните виртуальную машину докера и выберите параметр Настройки.

Настройки

Во-вторых, перейдите на вкладку Общие папки, выберите элемент Пользователи в разделе Машинные папки или добавьте новый общий ресурс, если он не существует. все же. Напишите /Users в пути к папке (путь к вашей локальной папке OSX), Users в имени папки и проверьте, установлены ли параметры Автоматическое монтирование и Сделать постоянным >проверено.

Общие настройки

Подтвердите поля и закройте окно приложения Virtual Box.

Важно перезагрузить виртуальную машину docker.

Вы можете использовать следующую команду для перезапуска:

docker-machine restart

Наконец, вам нужно только запустить контейнер с помощью следующей команды:

docker run -it -v Local-OSX-Path:Container-Path container-name /bin/bash

Пример:

docker run -it -v /Users/username/Documents/Workspaces/www:/var/www/html -p 8080:80 debian-nginx:1.0 /bin/bash

Когда вы получаете доступ к своему контейнеру, вы можете легко увидеть файлы, которые у вас есть в ваших локальных каталогах OSX.

Я нашел в другом вопрос другое решение — проект с открытым исходным кодом под названием docker-osx-dev - используя Boot2Docker + rsync, чтобы сделать то же самое, но быстрее... Не стесняйтесь попробовать и это.

Я надеюсь, что этой информации будет достаточно, чтобы решить ваши проблемы.

Удачи!

person Ellington Brambila    schedule 18.05.2016