wslのDockerからWindowsファイルにアクセスする
wslでdockerを使っている
dockerのコンテナからwindowsのにアクセスしたい
そのためにdockerからwindowsのディレクトリにマウントする
環境は
- windows10 home, version 1909
- virtual box, version 5.2.20 r125813 (Qt5.6.2)
- Docker tool box
- ubuntu on wsl
dockerのバージョンは以下の通り
$ docker version Client: Version: 18.09.6 API version: 1.39 Go version: go1.10.8 Git commit: 481bc77 Built: Sat May 4 02:35:57 2019 OS/Arch: linux/amd64 Experimental: false Server: Docker Engine - Community Engine: Version: 18.09.6 API version: 1.39 (minimum version 1.12) Go version: go1.10.8 Git commit: 481bc77 Built: Sat May 4 02:41:08 2019 OS/Arch: linux/amd64 Experimental: false
Ubuntuのバージョンは以下の通り
$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 18.04.2 LTS Release: 18.04 Codename: bionic
設定は以下の手順で行った
windows10 homeのwslでdockerを使う手順はこの記事を参照する
mecobalamin.hatenablog.com
1. virtual boxでディレクトリの共有設定
共有したいドライブの共有設定をする
今回はCとEドライブを共有する
Oracle VM VirtualBoxを起動し
[設定] ->[共有フォルダー]とクリックすると以下のウインドウが表示される
ウインドウ右側にあるボタンをクリックし
共有フォルダーを追加する
例えばcドライブを追加する場合、
フォルダーのパスはC:\
フォルダー名は小文字でc
[自動マウント]と[永続化する]にチェックを入れる
2. マウントディレクトリを変更する
通常、windowsのディレクトリは
wslの/mnt/にマウントされる
これをルート/にマウントするように変更する
変更する理由と変更方法については以下のサイトを参考にした
http://overslept-dev.hatenablog.com/entry/2019/03/11/013929
Docker for WindowsをWSLから使う時のVolumeの扱い方 - Qiita
systemkdのブログ: wsl + Docker for Windows でdocker-compose を動作させる際の Volume設定について
WSLからDocker Desktop for Windowsを使う | kawadeblog
https://inoccu.net/blog/2020/01/14/095703.html
/etc/wsl.confは存在していなかったので作成した
sudo vim /etc/wsl.conf
以下のように書き込んだ
[automount] root = "/"
3. wslの再起動
設定が終わったらwslを再起動して設定を読み込ませる
再起動はwslではなくpower shellで行う
WSL1/WSL2 を再起動する方法 - 備忘録
wslのウインドウを終了させて
power shellで以下のコマンドを実行する
> wslconfig /t Ubuntu
4. dockerの実行
dockerのubuntuを実行する
windowsのeドライブにあるe:\hogeディレクトリを
dockerの/tmp/fugaにマウントする
まず~/.profileでdockerのpathから/mnt/を取り除いて以下のように書き換える
export DOCKER_CERT_PATH=/c/Users/hogehoge/.docker/machine/machines/default
書き換えたら再読み込み
$ source ~/.profile
それからdockerを起動する
docker run --rm -v /e/hoge:/tmp/fuga -it ubuntu /bin/bash
オプションの説明は以下の通り
rmは終了時にコンテナを削除する
vにマウントするディレクトリを指定する
/e/hogeを/tmp/fugaにマウントする
/e/はVirtualBoxで設定した共有フォルダで
大文字・小文字を区別するので注意する
itは標準入出力を使うオプション
ubuntuは使用するイメージ名で起動時に/bin/bash/を使う
実際にマウントできたかどうかを確認する
wslで
echo "from wsl" > /e/hoge/test.txt
としてファイルを作成しdockerで以下のコマンドを実行
less /tmp/fuga/test.txt
ファイルの中身が確認できれば良い
同様にdockerから
echo "from docker" > /tmp/fuga/test.txt
で作ったファイルをwslからアクセスでたらオッケー