mecobalamin’s diary

人間万事塞翁が馬

https://help.hatenablog.com/entry/developer-option

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

設定は以下の手順で行った

  1. virtual boxでディレクトリの共有設定
  2. マウントディレクトリの変更
  3. wslを再起動
  4. dockerの実行

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からアクセスでたらオッケー