Docker初心者がDocker Desktop for Windowsを動かそうとしてハマったところ

こんにちは。DA事業本部の大高です。

最近、Dockerを少し触っているのですが、私の環境下においてうまく動かせなかったことがあったのでご紹介します。

環境

MacOS Mojave上でVMware Fusion 11.1.1を利用してWindows 10を動かしています。また、VMの設定でハイパーバイザーアプリケーションを有効にしています。

  • Windows 10 Pro 1903
  • Hyper-V インストール済み
  • WSL (Ubuntu-18.04) インストール済み

Docker Desktop for Windows のインストール

公式ドキュメントの Install Docker Desktop on Windows | Docker Documentation を参考にインストールします。

インストール時には「Hyper-Vを使うから、これかな…?」ぐらいの気持ちで、「Use Windows containers instead of Linux containers(this can be changed after installation)」のオプションをONにしてインストールをしました。

ハマったポイント1:起動しない

インストール後、起動させようとしてみましたが、いつまでたっても起動せずにエラーになりました。

調べてみると、以下のエラーと同様のエラーであり、Edge版の2.1.3.0バージョンだとうまくいくという情報を得たので試してみることにしました。

Docker Started To Timed out waiting for the lifecycle-server to start · Issue #4393 · docker/for-win

一旦、既存のDocker Desktop for Windowsはアンインストールし、Edge版を以下のページのダウンロードリンクからダウンロードしてインストールしました。

Docker Desktop for Windows Edge Release notes | Docker Documentation

ハマったポイント2:DockerfileのUSERが効かない

インストール後、今度はうまく起動したので以下の記事を参考にさせて頂きながら、WSL側の設定を済ませてdocker-compose buildを利用して、DockerfileからDockerイメージを作成しようとしました。

Docker for Windowsで快適な環境を得るまでの そこそこ長い闘い - Qiita

すると、なぜかDockerfileに記述した USER が効かないことに気付きました。具体的には、以下のようなDockerfileを利用したとします。

FROM amazonlinux:2

# Run as root
RUN yum install -y shadow-utils
RUN useradd "dev-user"

# Run as dev-user
USER dev-user
RUN whoami

すると、結果が

Step 5/5 : RUN whoami
 ---> Running in 25f959552939
root

のように、root になってしまうのです。USER dev-userと記述しているので、結果としてはdev-userになることを期待しています。

このケースの原因は、インストール時のオプション「Use Windows containers instead of Linux containers(this can be changed after installation)」にあり、このオプションを入れずにインストールし直すことで、想定通り以下のようになりました。

Step 5/5 : RUN whoami
 ---> Running in 25f959552939
dev-user

まとめ

まとめとして、今回の教訓は以下の2点でした!

  • 2019/10/04時点では、VMware Fusion上でWindows 10を動かしている場合には、Docker Desktop for WindowsはEdge版を利用したほうがよさそう
  • 明確な意図がなければ「Use Windows containers instead of Linux containers(this can be changed after installation)」のオプションは入れない

以上、どなたかのお役に立てれば幸いです。それでは!