Docker tool-boxでwindowsホストディレクトリをマウントする

f:id:pythonchan:20180408162313j:plain
Dockerと一言で言っても

①Docker machine

②Docker tool-box

③Docker for windows,mac

と色々ある。私のような初学者だとdockerコマンドもいちいちググって実行するが、このホストディレクトリのマウントはかなり苦労したので備忘録として残す。

なお、これから記載する方法は

・Windows10 Home or Pro

・Docker tool-box

に限る。これ以外では通用しないことがあるのでご注意いただきたい。
失敗例から見ていきます。
通常下記の通り進めるとマウントできる(らしい)

通常
docker run時のオプションとして-v /c/Users/[host directory]:/[container directory]を入れる.

すると,ホストのC:Users/[host directory]が,コンテナの/[container directory]にマウントされる.

docker run -v /c/Users/[host directory]:/[container directory] [container]
# 例として
docker run -v /c/Users/Host/test:/test ubuntu /bin/bash

はい、できませんでしたー

何が起こるかというと、上記のコマンドを行うとdocker runなので当然コンテナができる。
しかし…

# 作成されたコンテナを使用するためコンテナ起動
$ docker start [container ID]

# 起動したコンテナに入る
$ docker attach [container ID]
You cannot attach to a stopped container, start it first

You cannot attach to a stopped container, start it first

は?

いやなんで入れないねんwってことで永遠と作成されたコンテナに入れません。docker ps -aで見ると確かに作成されているのは確認できるのに…

どうやらVirtualBoxとの連携バグからこうなるらしい(クソOracleめ)

そこで!大量のネットの情報を試しに試してたどり着いたのが以下の方法

正しいマウント方法

# 事前にsrcディレクトリに適当にtest.txtを作成
# ホストユーザーのsrcディレクトリをubuntuイメージでマウント
$ docker run -it -v //c/Users/#HOSTUSER/src:/src ubuntu /bin/bash

# コンテナinするので確認
$ [container ID]# cd src
$ [container ID]:/src# ls
test.txt

ま、マウントできた!!!
ポイントは/をcの前に二重にすること!
これだけのために色んなサイト見ましたが、//cと記載あるのは少なかった(どいつもこいつも自称エンジニア(笑)の知ったかばかりだ)


しかし、気づきましたが、Winows環境での開発は少ないのでもはやMacに乗り換えるのが必須かもしれません。
なぜならネット上の多くの情報がMac環境下での情報であり、Win環境は海外サイトを漁らないと出てこないことが多いからです…
そもそもdocker for windowsHyper-Vとかクソ重い仮想マシンも使いにくい…

以上