boot2docker together with VirtualBox Guest Additions

How to mount /Users into boot2docker


Using boot2docker with my Mac, I want to seamlessly run something like:

docker run -i -t -v /Users/mattes/project1:/data/project1 ubuntu /bin/bash

UPDATE 17 Oct 2014:

As of Docker version 1.3 the work-around described in this blog post becomes obsolete.

Please read more here: https://blog.docker.com/2014/10/docker-1-3-signed-images-process-injection-security-options-mac-shared-directories


tl;dr Build your own custom boot2docker.iso with VirtualBox Guest Additions (see link) or download http://static.dockerfiles.io/boot2docker-v1.2.0-virtualbox-guest-additions-v4.3.14.iso and save it to ~/.boot2docker/boot2docker.iso.


The issue is that boot2docker doesn’t support
-v /Users/mattes/project1:/data/project1 out of the box since it doesn’t include VirtualBox Guest Additions. It’s still unclear to me, if the VirtualBox Guest Additions will make it into boot2docker any time soon/ ever.

“we’re making boot2docker as simple and small as possible — so at this point, adding tools that are not relevant to all usecases (bare HW, vbox, vagrant, hyper-v, vmware, kvm, etc) is not on the plan. This may change in future, but we havn’t completed our original feature set yet.”

SvenDowideit (boot2docker repo owner) commented on May 30 (link)

Though, there is a pull request to include VB guest additions, see https://github.com/boot2docker/boot2docker/pull/284

So I tried to built my own custom boot2docker.iso following the steps from the pull request above. I ran into a lot of issues and problems, so I thought it would be nice to document the steps that worked out for me.

Prerequisites: The following assumes you already have boot2docker installed. If not, follow http://docs.docker.com/installation/mac and use the Docker OSX Installer. Or use brew:

brew install docker
brew install boot2docker

Okay, so I basically build a new boot2docker.iso with this Dockerfile. It is completely based on the PR from steeve and all credits should go to him. In order to make the mount of /Users permanent for every boot2docker up I had to add some additional lines. See here. Personally, I think this hack is ugly. But I couldn’t find another way of doing it at the moment. (There is /var/lib/boot2docker/bootsync.sh for example, which might be a better place.)

Trying to set “Auto-mount” to “yes” DOESN’T WORK for me, unfortunately. I had to add the following.

Building that Dockerfile should save the boot2docker.iso in the resulting Docker image. To copy that iso file to the host system I often see:

# this does not work for me
$ docker run -i -t --rm mattes/boot2docker-vbga > boot2docker.iso

… which returns either an empty file or an iso file which doesn’t boot correctly. I tried that with different Docker versions and with Docker 1.0 obviously. The only thing that worked for me was:

# this works...
$ docker run -i -t --rm mattes/boot2docker-vbga /bin/bash
# and then in another shell:
$ docker cp <Container-ID>:boot2docker.iso boot2docker.iso

So once you have your fresh boot2docker.iso on your host system replace the old one at ~/.boot2docker/boot2docker.iso:

$ boot2docker stop
$ mv ~/.boot2docker/boot2docker.iso ~/.boot2docker/boot2docker.iso.backup
$ mv boot2docker.iso ~/.boot2docker/boot2docker.iso

Now let VirtualBox know, which path you want to mount:

$ VBoxManage sharedfolder add boot2docker-vm -name home -hostpath /Users

And this should be it. Let’s verify.

$ boot2docker up
$ boot2docker ssh "ls /Users"
Guest
Shared
mattes

Now you can …

docker run -i -t -v /Users/mattes/project1:/data/project1 ubuntu /bin/bash

For the lazy: You could just download http://static.dockerfiles.io/boot2docker-v1.2.0-virtualbox-guest-additions-v4.3.14.iso and move it to ~/.boot2docker/boot2docker.iso. Make sure to stop boot2docker before. Find the build log here.


EDIT 20 Jun 2014: updated boot2docker to version 1.0.1
EDIT 7 Jul 2014: updated boot2docker to version 1.1.0
Edit 11 Jul 2014: updated boot2docker to version 1.1.1
Edit 24 Jul 2014: updated boot2docker to version 1.1.2
Edit 14 Aug 2014: updated brew install commands
Edit 24 Aug 2014: updated boot2docker to version 1.2.0 and vbox to 4.3.14

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.