docker
Windows10
BashOnUbuntuOnWindows
WSL

どうしても Docker on Ubuntu 18.04 on WSL したかった

WSL上でDocker Engineが動くようになっていたっぽいという話
https://qiita.com/yanoshi/items/dcecbf117d9cbd14af87

上の記事を見て喜び勇んでやってみたら、最新のDockerでは動きませんでした.... と言うお話です。

環境

  • Windows 10 Pro
    • Version 1803
    • Build 17134.165
  • Ubuntu 18.04
    • 16.04で docker.io を使うのであれば、バージョンが古いので多分あっさり動くと思います。

とりあえず試したら....

% sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
9db2ca6ccae0: Extracting [==================================================>]     985B/985B
docker: failed to register layer: Error processing tar file(exit status 1): invalid argument.
See 'docker run --help'.

がーん

最初はk8sが使ってみたかったため、docker 公式パッケージ docker-ce (18.06.0~ce~3-0~ubuntu) をインストールするもダメ。
Ubuntuが用意してくれているパッケージ docker.io (17.12.1-0ubuntu1) もダメでした。

どうすれば動くんだろう

と、言う事でいろいろ調べたところ、元々Docker on WSLについて議論が行われていたRedditのスレに答えがありました。

https://www.reddit.com/r/bashonubuntuonwindows/comments/8cvr27/docker_is_running_natively_on_wsl/dxxn30d/

That is this change . WSL doesn't support MS_SLAVE in mount. That error appears since docker-ce 17.09.1 but it's easy to fix if you compile latest docker yourself.

Docker 17.09.1 からマウント時に使うようになった MS_SLAVE と言うのをWSLがサポートしていないのが原因らしい。

取り急ぎ 17.09.0 で試してみる。

% curl -O https://download.docker.com/linux/debian/dists/stretch/pool/stable/amd64/docker-ce_17.09.0~ce-0~debian_amd64.deb
% sudo dpkg -i docker-ce_17.09.0\~ce-0\~debian_amd64.deb
% docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
9db2ca6ccae0: Pull complete
Digest: sha256:4b8ff392a12ed9ea17784bd3c9a8b1fa3299cac44aca35a85c90c5e3c7afacdc
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.
...

動いた。

と、言う事で現状どうしても Docker on Ubuntu 18.04 on WSL したいのであれば、以下の内のどれかを選ぶしか無さそうです。

  1. 17.09.0 を使う
  2. 以下コミットをRevertして自分でビルドして使う (未検証)
    https://github.com/docker/docker-ce/commit/6c6a1827cfc6c221c0477f55f20758a6e5487e5e
  3. WindowsをInsider Preview版にする (未検証。ビルド17666でMS_SLAVEがサポートされたらしい)
  4. RS5のリリースを待つ (秋くらいですかね?)

もちろんDocker for Windowsと併用するのもアリだと思います。

WSL(Bash on Windows)でDockerを使用する
https://qiita.com/yoichiwo7/items/0b2aaa3a8c26ce8e87fe