Skip to content

Instantly share code, notes, and snippets.

@codeinthehole
Last active November 11, 2023 01:22
Show Gist options
  • Select an option

  • Save codeinthehole/7ea69f8a21c67cc07293 to your computer and use it in GitHub Desktop.

Select an option

Save codeinthehole/7ea69f8a21c67cc07293 to your computer and use it in GitHub Desktop.
How to share folders with docker containers on OSX

How to share a folder with a docker container on OSX

Mounting shared folders between OSX and the docker container is tricky due to the intermediate boot2docker VM. You can't use the usual docker -v option as the docker server knows nothing about the OSX filesystem - it can only mount folders from the boot2docker filesystem. Fortunately, you can work around this using SSHFS.

Install sshfs on the boot2docker machine:

$ boot2docker ssh
docker@boot2docker:~$ tce-load -wi sshfs-fuse

and create a folder to mount to:

docker@boot2docker:~$ mkdir ~/osx

Ensure that 'Remote Login' is enabled in 'System Preferences > Sharing' and make a note of your host IP address.

Now run sshfs on the boot2docker VM to mount a folder from your host machine:

docker@boot2docker:~$ sudo sshfs $username@$ipaddress:/Users/$username/ /home/docker/osx/

replacing $username and $ipaddress as appropriate. You'll have to enter your password.

Now you can run a docker container (using the docker client on your host machine) and mount a local folder (using the path to it on the boot2docker VM), eg:

$ docker run -it -v /home/docker/osx/somefolder:/opt/somefolder ubuntu bash

and any updates made within your local folder will be immediately visible within the container.

Largely taken from the comments here: boot2docker/boot2docker#188

@chrismckinnel
Copy link
Copy Markdown

It's worth noting here that if you're ssh'd into the boot2docker VM as the docker user, after running the sshfs command above if you try and ls -la on the docker home dir to test that your mount worked you won't have access:

docker@boot2docker:~$ ll /home/docker/
ls: /home/docker/osx: Permission denied
total 4
----------    1 docker   staff           29 Jan  1  1970 boot2docker, please format-me

So if you sudo -s you'll get some love:

docker@boot2docker:~$ sudo -s
root@boot2docker:/home/docker# ls -la
total 20
drwxr-sr-x    5 docker   staff          180 Jun 13 10:26 . 
drwxrwxr-x    3 root     staff           60 Jun 13 10:26 ..
-rw-rw-r--    1 docker   staff          307 Jun 13 10:50 .ash_history
-rw-r--r--    1 docker   staff          446 Jun 13 10:26 .ashrc
drwxr-sr-x    3 docker   staff           60 Jun 13 10:26 .local
-rw-r--r--    1 docker   staff          920 Jun 13 10:26 .profile
drwx--S---    2 docker   staff           80 Jan  1  1970 .ssh
----------    1 docker   staff           29 Jan  1  1970 boot2docker, please format-me
drwxrwxr-x    1 10133    10000         2006 Jun 13 10:46 osx

The permissions on the mounted folder are sweet as for mounting it as a volume with docker though.

Party time.

@visigoth
Copy link
Copy Markdown

for whatever reason, i am not able to ssh back to my host machine. i do have ssh enabled there, and in os x, i'm able to ssh to localhost. trying to ssh back to my host machine's IP address on vboxnet0 leaves ssh in a "connecting" state. telnet 22 also seems to hang in a connecting state. not sure what's going on. any ideas?

@m3nu
Copy link
Copy Markdown

m3nu commented Aug 24, 2014

Works as promised.

@crucialfelix
Copy link
Copy Markdown

note: boot2docker automatically mounts /Users now this solution isn't needed anymore. just go into boot2docker instance and ls /Users

Copy link
Copy Markdown

ghost commented Nov 20, 2014

+1 @crucialfelix - thank you!

@scald
Copy link
Copy Markdown

scald commented Dec 10, 2014

Thanks @crucialfelix - I was able to mount quickly like this:

run -it -v /Users:/Users imagename bash

@ofostier
Copy link
Copy Markdown

ofostier commented Jun 5, 2015

Hi all,

I got an
read: Connection reset by peer

when i enter my password any ideas ?

Thx

@WishCow
Copy link
Copy Markdown

WishCow commented Jul 6, 2015

Is the information provided by @crucialfelix still true? We are trying to set this up on a mac, but /Users is definitely not mounted.

@0x73706f6f6b
Copy link
Copy Markdown

Make sure you're running the latest boot2docker v1.7.0

@Elijen
Copy link
Copy Markdown

Elijen commented Aug 12, 2015

tce-load -wi sshfs-fuse Produces the following error for me :(

Downloading: sshfs-fuse.tcz
Connecting to repo.tinycorelinux.net (89.22.99.37:80)
wget: server returned error: HTTP/1.1 404 Not Found
md5sum: sshfs-fuse.tcz.md5.txt: No such file or directory
Error on sshfs-fuse.tcz

@igormukhingmailcom
Copy link
Copy Markdown

Has same issue:

docker@default:~$ tce-load -wi sshfs-fuse

Downloading: sshfs-fuse.tcz
Connecting to repo.tinycorelinux.net (89.22.99.37:80)
wget: server returned error: HTTP/1.1 404 Not Found
md5sum: sshfs-fuse.tcz.md5.txt: No such file or directory
Error on sshfs-fuse.tcz

Maybe because I have latest versions:

Boot2Docker version 1.8.1, build master : 7f12e95
Docker version 1.8.1, build d12ea79

@fyddaben
Copy link
Copy Markdown

fyddaben commented Sep 8, 2015

sudo sshfs -o allow_other user@myserver:/home/user/myprojects ~/mount/myprojects

need add allow_other, or noroot user cant have permissio

@fyddaben
Copy link
Copy Markdown

fyddaben commented Sep 8, 2015

but when i restart boot2docker ,
sshfs : command not found
why?

@thalesfsp
Copy link
Copy Markdown

@codeinthehole it's still necessary or the new docker-machine provide it? I'm trying to get hot-reload (NodeJS) with PM2 or Nodemon. Cheers!

@Blizzke
Copy link
Copy Markdown

Blizzke commented Feb 6, 2016

404 for the sshfs-fuse install here as well. Getting a bit irritated by how much work this is, simply to get a folder mounted

@lrkwz
Copy link
Copy Markdown

lrkwz commented Mar 7, 2016

@anupvarghese
Copy link
Copy Markdown

With native OSX app, it can be done easily as follows,

To pull a new docker image (optional step)
docker pull ubuntu

Make volume share as below,
docker run -t -i -v $(pwd):/home/shared ubuntu /bin/bash

@ReaddyEddy
Copy link
Copy Markdown

Agreed this worked for me
docker run -it -v /Volumes/volname:/volname image-id /bin/bash

@inancgumus
Copy link
Copy Markdown

inancgumus commented May 14, 2017

How about mounting a volume from a different docker-machine to a local docker host? Such as a docker-machine running in digitalocean droplet to my macbook?

@pilgrim2go
Copy link
Copy Markdown

Thanks @fyddaben @codeinthehole: it works for me

@danvc
Copy link
Copy Markdown

danvc commented Jun 12, 2017

Hi Guys, I did the inverse and worked faster with less steps to get it working:

https://github.com/DanZeuss/DockerOnMacOS

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment