質問: ### 前提・実現したいこと Volumeでホスト側にマウントした場所が下記なのですが、 ``` /mnt/sda1/var/lib/docker/volumes/~ ``` まず、mntディレクトリに移動しようとすると行けません。 (もちろん、コンテナの中でなく、ホスト側でcdコマンドを実行しています。) ご教授のほどお願いいたします。 マウントした場所は合っています。 ### 該当のソースコード ``` $ cd /mnt ``` ### 発生している問題・エラーメッセージ ``` bash: cd: /mnt: No such file or directory ``` ### 補足情報(言語/FW/ツール等のバージョンなど) Docker-toolbox, Windows ### 追記 /mnt/sda1/var/lib/docker/volumes/~ は自分で指定したディレクトリでなく、マウントしたときに自動で指定されたディレクトリなのですが、 もしかして、このディレクトリを作らなくてはならないということでしょうか? ### 追記2 $ cd /var bash: cd: /var: No such file or directory となりました。 $ pwd で、見てみると、 /c/Users/ユーザー名 となりました。 どうやら、Docker ToolBoxのホスト側コンピュータは、 自分のローカルのWindowsとディレクトリがリンク(?)してるみたいです。 lsなどで調べると、ローカルのWindowsのディレクトリが表示されました。 そうなるど、 /mnt はどこになるのでしょうか? pwdしたときの/cはCドライブを指しているはずなので、 /mntは、mntドライブを指しているということでしょうか? 自分のWindowsには、Cドライブしかありません。 /mntドライブを作ることは可能でしょうか? もしくは、mntドライブは特別な場所にあったりして、見ることができるのでしょうか? LinuxでDockerを動かしているときは、 確かに、「/var/lib/docker/volumes/」にあって、見ることができたのですが、 このWindowsのDocker ToolBoxで動かしているホスト側のコンピュータのディレクトリ構造がよくわかりません。 ご教授のほどよろしくお願いします。 補足: この"/mnt/sda1/var/lib/docker/volumes/~"は、ホスト側でパスを指定しなかったので、デフォルトで作られた ホスト側のマウントパスです。volumeを作る際にパスを指定すれば、ホスト側でmntはどこ?みたいな作業はしなくていいと思いますが、 このデフォルトで指定されたmntのディレクトリについて知りたいです。 ### 追記3 コンテナ側は/hogeというディレクトリを指定しました。 volume作成時に指定して、コンテナに/hogeディレクトリが作成されているのを確認しました。 また、一応コンテナ内で、/mntディレクトリについて調べてみましたが、/mntディレクトリは存在していましたが、 /mntより下には何もありませんでした。
回答: > > Volumeでホスト側にマウントした場所が下記なのですが > > > ホストマシンは、Windowsのことですよね?多分ホストマシンとゲストマシン(Dockerコンテナ)が逆なのではないでしょうか? Dockerfileで下記のように設定したとすると、このマウントポイントはコンテナ内のパスのことを言っているので、このパスをWindowsと共有しなければなりません。Dockerコンテナ内にこのパスがないと何もできません。 ``` VOLUME: ["/mnt/sda1/var/lib/docker/volumes/xxx"] ``` まずは、Dockerコンテナ内でこのパスを確認してみてはいかがでしょうか。 私の手元の環境はWSL+Dockerの構成なので何とも言えませんが、以前に**Docker+VirtualBox**を使っていたことがあります。そのときは、VirtualBox上に共有フォルダーの設定をして、コンテナ内の`/var/lib/boot2docker/bootsync.sh`に下記のように書いておいて再起動していました。 ``` [ -d /mnt/sda1/var/lib/docker/volumes/xxx ] || sudo mkdir -p /mnt/sda1/var/lib/docker/volumes/xxx sudo mount -t vboxsf -o defaults,uid=0,gid=0,dmode=755,fmode=644 "VirtualBoxの共有フォルダーで設定した共有名" /mnt/sda1/var/lib/docker/volumes/xxx ``` 最新のDockerインストーラーでインストールした場合は、デフォルトで**Docker+Hyper-V**構成です。**Windows10 Creators Update**適用後であればUbuntuをWindowsに入れることができる(WSL)ので、私はDockerインストール後、UbuntuからDockerにアクセスできるようにしています。 ただし、この構成だと使用感としてはちょっと重たいです。快適に使うならDocker+VirtualBoxのほうが良いかもしれません。 余談ですが、開発マシンとしていろいろ試したいなら`Vagrant`のほうが良いです。Dockerは同じテスト環境をさくっとチームで共有したり、Dockerの開発完了コンテナをデプロイしたりするときには非常に便利です。 開発環境で`node`入れたり、消したり、パッケージ追加したり、などいろいろゴリゴリしたい場合は、Dockerの場合非常にめんどくさいです。私が便利なやり方を知らないだけかもしれませんが。。。