13
13

More than 5 years have passed since last update.

boot2dockerでコンテナからホストのディレクトリをマウントする(Mac)

Posted at

docker runには-vオプションというのがあって、dockerホストのディレクトリをコンテナ内のディレクトリにマウントすることができます。ただboot2dockerを使っている場合、マウントされるのはVirtualBox上で動いているVMのディレクトリになります。私の場合はMacですが、できればコンテナからMacのディレクトリを直接マウントしたくなります。

仕組み

VirtualBoxにはGuestAdditionsというものがあって、ゲストOSにインストールすることでパフォーマンスを引き出したり、今回使う共有フォルダ機能を使うことができるようになります。詳しくは下記。

6.4. VirtualBox Guest Additions のインストール

共有フォルダというのは、ホストOSのディレクトリをVirtualBox上のVMから読み書きできるようにするものです。これを使って、

  1. 共有フォルダ機能を使って、Mac上のディレクトリをVMからマウントする
  2. dockerコンテナからは、1でマウントしたディレクトリをマウントする

という方法をとります。

手順

boot2dockerはISOイメージからVMを作成し、それを起動してその上でdockerが動作する仕組みになっています。ISOイメージは~/.boot2docker/boot2docker.isoにあります。このISOイメージにはGuestAdditionsはインストールされていません。インストールもできますが、インストール済みのISOイメージを作っている人がいるので、ありがたく使わせてもらいます。

boot2docker together with VirtualBox Guest Additions

# ダウンロード
cd ~/.boot2docker
wget http://static.dockerfiles.io/boot2docker-v1.2.0-virtualbox-guest-additions-v4.3.14.iso 

# リネーム
mv boot2docker.iso _boot2docker.iso.orig
mv boot2docker-v1.2.0-virtualbox-guest-additions-v4.3.14.iso boot2docker.iso

VMを停止します

boot2docker stop

VMを削除して、ISOイメージから作り直します。既存のコンテナやイメージは全て消えるので注意してください。

boot2docker destroy
boot2docker init

VMを起動する前に共有フォルダの設定を行います。-hostpathは、共有したいMac上のディレクトリを指定します。以下のようにすると、Mac上の/UsersがVM上の/Usersにマウントされます。LaunchPadからVirtualBoxを起動して、GUIで設定してもOKです。

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

なお-nameは、homeを指定するとVM上の/Usersに自動的にマウントしてくれますが、それ以外を指定すると手動でマウントする必要があります。これはISOイメージの/etc/mtabに「none /Users vboxsf rw,nodev,relatime 0 0」と書いてあるためです。

さて、VMの設定はこれで終わりです。起動します。

boot2docker start

/Usersが正しくマウントされているか確認します。boot2docker sshでVMにログインし、/Usersを見てみます。

boot2docker ssh
ls -l /Users

正しくマウントされていれば、ホスト上にあるファイルが表示されるはずです。

あとはdocker runの-vオプションを指定すれば、コンテナから直接ホスト上のディレクトリが読めるようになります。

docker run -v /Users:/mnt/users -i /bin/bash
13
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
13