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)」のオプションは入れない
以上、どなたかのお役に立てれば幸いです。それでは!