Docker
boot2docker

boot2dockerでコンテナからホストのファイルを参照する

More than 3 years have passed since last update.

この投稿は古い内容です。Docker 1.3からはboot2dockerを利用していても何も考えずにホストマシンのボリュームをマウントできるようです。

boot2dockerでのVolume問題が解決しそう | SOTA

OSXやWindowsからdockerを利用する場合にはboot2dockerを利用します。しかし、boot2dockerがVirtualboxで動作する仮想マシンであるため、docker runの際、-vオプションでホストのディレクトリをマウントさせようとしても、boot2docker内のディレクトリを参照してしまうため、うまく行きません。

boot2dockerのアップデートでその辺りに対応をしたので、方法のメモ。


手順

boot2docker#folder-sharingの情報です。

どうやら、sambaサーバーとなるコンテナを動作させてsambaの共有フォルダをOSXやWindowsからマウントする方法を取るようです。

$ docker run -v /data --name my-data busybox 

$ docker run --rm -v /usr/local/bin/docker:/docker -v /var/run/docker.sock:/docker.sock svendowideit/samba my-data
$ boot2docker ip
192.168.59.103
$ docker ps
4aac758ea300 svendowideit/samba:latest /setup.sh --start my About an hour ago Up About an hour 0.0.0.0:137->137/tcp, 0.0.0.0:138->138/tcp, 0.0.0.0:139->139/tcp, 0.0.0.0:445->445/tcp samba-server

svedowideit/sambaなるコンテナが動作していることを確認したら、OSXの場合はfinderからcifs://192.168.59.103へ、Windowsの場合はExplorerから//192.168.59.103に接続します。

/dataディレクトリをGuestでマウントします。

OSXなら/Volumes/data、Windowsなら//192.168.59.103/dataに置いたファイルを他のDockerコンテナから参照できるようになりました。

他のDockerコンテナからファイルを参照する際には、コンテナ起動時に

$ docker run --volumes-from my-data centos su -

のように--volumes-fromを指定してあげると良いようです。

これは便利。