9
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[Docker] WSL2で作成した名前付きボリュームがない

Last updated at Posted at 2021-03-28

追記

この記事は2021/03/28に執筆しました。

しかし2021/03/30現在、改めてvolumeを作成したところ、WSL2のターミナル上から確認できるようになりました。
ディレクトリ:/var/lib/docker/volumes
環境は全く変わっていません。謎です。

はじめに

volumeについて学ぼうとした矢先です。
Linuxと全然挙動が違う+日本語の記事がなさそうなので書きました。
あと、仕組みを全然理解できないです。

よく言われているWindowsOS上のディレクトリをコンテナ上にバインドマウントする際の注意とは異なります。

問題

  • WSL2上で作った名前付きボリュームが消える

別の言い方をすると、

  • そこにあるって書いてあるのに、そこを見に行ったら"なかった"

結論

Windowsファイルシステム上の以下のディレクトリにある。

\\wsl$\docker-desktop-data\version-pack-data\community\docker\volumes

エクスプローラーでアクセスしてみてください。

前提

まず環境は以下です。
WSL(version1)での確認はしていません。

  • OS
    • Windows 10 Pro 20H2 build 19042.867
  • WSL2
    • Ubuntu 20.04.2 LTS
  • Docker
    • 20.10.5, build 55c4c88
  • Docker Desktop for Windows
    • 3.2.2

発生状況

docker volume create GOMIで名前付きボリューム"GOMI"を作成
docker volume inspect GOMIでどこに作られたか確認し

[
    {
        "CreatedAt": "2021-03-28T03:00:15Z",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/GOMI/_data",
        "Name": "GOMI",
        "Options": {},
        "Scope": "local"
    }
]

"Mountpoint": "/var/lib/docker/volumes/GOMI/_data",
とあるので、(これはLinuxのデフォでも同じディレクトリに保存されるので特に問題はなし)

# cd /var/lib/docker/volumes
# ll
total 40
drwx-----x  2 root root  4096 Mar 10 00:18 ./
drwx--x--x 12 root root  4096 Mar 10 00:18 ../
brw-------  1 root root  0, 2 Mar 10 00:18 backingFsBlockDev
-rw-------  1 root root 32768 Mar 10 00:18 metadata.db

あるはずの場所にありません。(動かしてるのはroot権限です)
しかし、docker volume ls上では確かにあります。

# docker volume ls
DRIVER    VOLUME NAME
local     GOMI

それで調べたのですが、Qiitaや他のサイトに投稿されているものは「ホスト上のCドライブをコンテナにマウントする際の注意事項」等しかなさそうでしたので…

結論こちらが参考になりました。というか答えが載ってました。
WSL2 where is docker volume location? · Discussion #4176 · microsoft/WSL

解決方法

Windowsのエクスプローラーで、下記にアクセスしてください。

\\wsl$\docker-desktop-data\version-pack-data\community\docker\volumes

WSL2上で

$ cd /mnt/wsl/docker-desktop-data/version-pack-data

としても何も表示されないので気をつけてください。

一番簡単なアクセスの方法は「Windowsキー + R」のファイル名を指定して実行で
\\wsl$\docker-desktop-data\version-pack-data\community\docker\volumes
と打ってEnterです。
エクスプローラーに打っても同じです。

なぜこうなってるのか

恐らくWindowsOS上でLinuxを動かす上で仕方のない仕組みなんでしょうが知識がないため全くわかりません。

↓この方が言ってますが
WSL2 where is docker volume location? · Discussion #4176 · microsoft/WSL

Maybe in WSL2 way, data only exists in Windows systems.
When we use WSL2 based engine, Docker Desktop mount "docker.sock" into Linux "/var/run/docker.sock". >Linux docker client access to windows docker service.
I find this idea in below link: https://blog.csdn.net/qqhappy8/article/details/106819429

でもマウントされた場所ってどうやって見つけられるんですか?せめてシンボリックリンクでもあると思ったんですが

最後に

dmckee-ebscoさんも言ってます。

This is... not simple. I don't know why it's this hard.
:これは...単純じゃない。なぜこんなにも難しいのかわからない。

関係ないですけど、今どきは英語圏のページだけじゃなく中国語も学んで中国語のページも検索できれば効率的に情報を集めれるなと思いました。

9
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?