Docker-machine automounts the users directory… But sometimes that just isn’t enough.
I don’t know about docker 1.6, but in 1.8 you CAN add an additional mount to docker-machine
Add Virtual Machine Mount Point (part 1)
CLI: (Only works when machine is stopped)
VBoxManage sharedfolder add <machine name/id> --name <mount_name> --hostpath <host_dir> --automount
So an example in windows would be
/c/Program\ Files/Oracle/VirtualBox/VBoxManage.exe sharedfolder add default --name e --hostpath 'e:\' --automount
GUI: (does NOT require the machine be stopped)
- Start “Oracle VM VirtualBox Manager”
- Right-Click
<machine name>(default) - Settings…
- Shared Folders
- The Folder+ Icon on the Right (Add Share)
- Folder Path:
<host dir>(e:) - Folder Name:
<mount name>(e) - Check on “Auto-mount” and “Make Permanent” (Read only if you want…) (The auto-mount is sort of pointless currently…)
Mounting in boot2docker (part 2)
Manually mount in boot2docker:
- There are various ways to log in, use “Show” in “Oracle VM VirtualBox Manager”, or ssh/putty into docker by IP address
docker-machine ip default, etc… sudo mkdir -p <local_dir>sudo mount -t vboxsf -o defaults,uid=`id -u docker`,gid=`id -g docker` <mount_name> <local_dir>
But this is only good until you restart the machine, and then the mount is lost…
Adding an automount to boot2docker:
While logged into the machine
- Edit/create (as root)
/mnt/sda1/var/lib/boot2docker/bootlocal.sh, sda1 may be different for you… -
Add
mkdir -p <local_dir> mount -t vboxsf -o defaults,uid=`id -u docker`,gid=`id -g docker` <mount_name> <local_dir>
With these changes, you should have a new mount point. This is one of the few files I could find that is called on boot and is persistent. Until there is a better solution, this should work.
Old method: Less recommended, but left as an alternative
- Edit (as root)
/mnt/sda1/var/lib/boot2docker/profile, sda1 may be different for you… -
Add
add_mount() { if ! grep -q "try_mount_share $1 $2" /etc/rc.d/automount-shares ; then echo "try_mount_share $1 $2" >> /etc/rc.d/automount-shares fi } add_mount <local dir> <mount name>
As a last resort, you can take the slightly more tedious alternative, and you can just modify the boot image.
git -c core.autocrlf=false clone https://github.com/boot2docker/boot2docker.gitcd boot2dockergit -c core.autocrlf=false checkout v1.8.1#or your appropriate version- Edit
rootfs/etc/rc.d/automount-shares -
Add
try_mount_share <local_dir> <mount_name>line right before fi at the end. For exampletry_mount_share /e eJust be sure not to set the to anything the os needs, like /bin, etc…
docker build -t boot2docker .#This will take about an hour the first time 🙁docker run --rm boot2docker > boot2docker.iso- Backup the old boot2docker.iso and copy your new one in its place, in ~/.docker/machine/machines/
This does work, it’s just long and complicated
docker version 1.8.1, docker-machine version 0.4.0