🤨

Azure VMでDockerを使う時はサイズに気をつけましょう

に公開

Docker Desktopが使えない

Azure上に Standard B2s のVM(Windows)を立てて、Docker Desktop をインストールしたところ、docker run hello-world が動かず、docker info の Server セクションもエラー。

エラー文

Server:
error during connect: Get "http://%2F%2F.%2Fpipe%2FdockerDesktopLinuxEngine/v1.49/info": open //./pipe/dockerDesktopLinuxEngine: The system cannot find the file specified.

Docker Desktopの画面にも以下のエラー表示が出ました。

WSL2 is not supported with your current machine configuration.

WSL2 が現在のマシン構成ではサポートされていない?

調べた結果、これは 入れ子の仮想化(Nested Virtualization) に対応していないVMサイズを使っていたことが原因でした。

https://learn.microsoft.com/ja-jp/virtualization/hyper-v-on-windows/user-guide/nested-virtualization

Docker Desktopは、内部でHyper-VやWSL2といった軽量仮想マシンを使ってDockerエンジンを動かします。
つまり、「仮想マシンの中でさらに仮想マシンを動かす」仕組みになっています。
この構成を支えるには、Azure VM側でも入れ子の仮想化が有効である必要があります。

対応しているVMサイズ

仮想化を入れ子にする: サポートされています となっているサイズを選択しましょう。
Bシリーズは全て使えません。
https://learn.microsoft.com/ja-jp/azure/virtual-machines/sizes/overview?tabs=breakdownseries%2Cgeneralsizelist%2Ccomputesizelist%2Cmemorysizelist%2Cstoragesizelist%2Cgpusizelist%2Cfpgasizelist%2Chpcsizelist#general-purpose

サイズを変えて試してみる

入れ子の仮想化がサポートされている D2ads_v5 にサイズを変えて再起動したら、ちゃんと使えました。

まとめ

安く済ませようと Standard_B1s を選びましたが、Docker Desktopを使うにはNested Virtualizationが必要です。
Dockerがうまく動かないときは、まずVMサイズが対応しているかどうかを疑ってみると解決できるかもしれません。

NCDCエンジニアブログ

Discussion