Docker for WindowsでWindowsの任意のフォルダをコンテナにマウントする

公開日:2018-11-11
最終更新:2018-11-11

普通にdockerを使っている場合は、docker run -v /source:/destinationとするとコンテナホストの/sourceをコンテナの/destinationにマウントして、コンテナからアクセスできる。

ではDocker for Windowsで、C:\Sourceをコンテナの/destinationからアクセスしたいときにどうするか。仮想化ホストのC:\Sourceをコンテナの/destinationに直接バインドすることはできない。

手順としては、仮想化ソフトウェアの共有フォルダの機能で、ホストのC:\Sourceを共有フォルダに設定し、ゲスト(=コンテナホスト)でそれを/Sourceにマウントして、それからdocker run -v /Source:/destinationとしてコンテナにマウントすることになる。

以下、この手順をVirtualBoxで行う場合とVMwareで行う場合のそれぞれについて説明する。同じ趣旨の記事はQiitaにもあるが、なぜその方法でよいのか本人が理解していなかったり、方法が最適でなかったりする。以下に、なぜそれでよいかわかるように最適な方法を書いたので参考にしてほしい。

VirtualBoxの場合

VirtualBoxの場合はdocker-machineでVMを作成するときに、virtualboxドライバのオプションで共有フォルダを指定する。

docker-machine create --driver virtualbox --virtualbox-share-older=C:\Source:Source vbox

これでVirtualBoxが自動マウントでC:\Sourceをコンテナホストの/Sourceにマウントするので、docker run -v /Source:/destinationとすれば上の図と同じ環境ができる。

共有フォルダを指定しない場合は\\?\c:\Users:c/Usersを指定したことになる。C:\Usersが見えればいいのなら、docker run -v /c/Users:/destinationだけでいい。

VirtualBoxの自動マウントはデフォルトでは共有名c/UsersをゲストOSの/media/sf_c/Usersにマウントする。docker-machineのvirtualboxドライバは、マウントフォルダ/mediaとマウントプレフィックスsf_を空に設定するので/c/Usersにマウントされる。

VMwareの場合

Docker for WindowsをVMwareで使う方法は、Docker Machine VMware Workstation DriverのInstallationに説明がある。日本語ならVMware Workstation が導入された環境で、Docker Toolboxを利用する方法を参考にするといい。

docker-machineのvmwareドライバはオプションで共有フォルダを指定できないので、作成した後に設定を書き換える。%USERPROFILE%/.docker/machine/machines/dev/dev.vmxにデフォルトでC:\Usersが共有フォルダに設定されている。

sharedFolder0.hostPath = "C:\Users\"
sharedFolder0.guestName = "Users"

これをC:\Sourceに書き換える。

sharedFolder0.hostPath = "C:\Source\"
sharedFolder0.guestName = "Source"

VMwareはSourceをコンテナホストの/mnt/hgfs/Sourceに自動的にマウントするので、docker run -v /mnt/hgfs/Source:/destination/destinationからC:\Sourceにアクセスできる。

docker-machineのvmwareドライバは、デフォルトでC:\Usersをコンテナホストの/Usersにマウントして/c/Users -> /Usersとシンボリックリンクを張る。これによりVirtualBoxと同じ操作でC:\Usersをコンテナにマウントできる。

VirtualBoxと違って、VMwareでC:\Usersを自動的にコンテナホストの/Usersにマウントするのは難しい。docker-machineのvmwareドライバは、docker-machine startで以下のシェルスクリプトをコンテナホストに実行させてマウントしている。この処理は共有名Userを決め打ちしている。

"C:/Program Files (x86)"/VMware/VMware Workstation/vmrun.exe -gu docker -gp tcuser runScriptInGuest C:\Users\fujie\.docker\machine\machines\dev\dev.vmx /bin/sh [ ! -d /Users ]&& sudo mkdir /Users;[ ! -d /c ]&& sudo mkdir -p /c;[ ! -d /c/Users ]&& sudo ln -s /Users /c/Users;[ -f /usr/local/bin/vmhgfs-fuse ]&& sudo /usr/local/bin/vmhgfs-fuse -o allow_other .host:/Users /Users || sudo mount -t vmhgfs .host:/Users /Users
記事が少しでもいいなと思ったらクラップを送ってみよう!
13
+1
@fujiedaの技術ブログ

よく一緒に読まれている記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる

技術ブログをはじめよう

Qrunch(クランチ)は、ITエンジニアリングに携わる全ての人のための技術ブログプラットフォームです。

技術ブログを開設する

Qrunchでアウトプットをはじめよう

Qrunch(クランチ)は、ITエンジニアリングに携わる全ての人のための技術ブログプラットフォームです。

Markdownで書ける

ログ機能でアウトプットを加速

デザインのカスタマイズが可能

技術ブログ開設

ここから先はアカウント(ブログ)開設が必要です

英数字4文字以上
.qrunch.io
英数字6文字以上
ログインする