« Docker for Windowsで"Network timed out"と言われてイメージを取ってこれない問題 | トップページ | Windows 10のコンテナ機能とDocker for Windowsを共存させる上での問題点(追記あり) »

2016年8月 4日 (木)

Windows 10のコンテナ機能(Docker for Windowsじゃないよ)が動かない話と気になった点

覚え書き。

Windows 10 Anniversary Updateが公開され、 それに伴い、Windows 10のコンテナ機能も一般利用可能になりました。

で、Windows 10のコンテナ機能を使ってみようとしてみたところ、

  • 手順通りにやっても動かない点
  • 気になった点

があったので、それを書き留めておきます。

Windows 10のコンテナ機能とは

Windows 10のコンテナ機能とは、

  • Microsoft純正の、
  • docker互換である、
  • 「Windowsコンテナ」(Windows Server 2016の機能)の、
  • サブセットをWindows 10に載せたものであり、
  • (プレビューではない「正式」なWindows 10としては)Windows 10 Anniversary Update(version 1607)以降で利用できます (でもまだ仕上がってない感触)。

前回のエントリで動かした Docker for Windowsとはまた別物です。

ツールコンテナで動かすイメージ提供者
Windows 10 コンテナWindowsイメージMicrosoft
Docker for WindowsLinuxイメージDocker

でも、どちらもdockerコマンドでコントロールできます。

Windows 10のコンテナ機能の有効化方法

コンテナ機能を利用できるのは、 Windows 10 (version 1607)のProまたはEnterpriseです。

有効化手順は、 「Windows コンテナーに関するドキュメント」の中の 「Windows 10 の Windows コンテナー」 の通り。

問題点

上記の「Windows 10 の Windows コンテナー」の手順中の、 「3.コンテナーの基本イメージのインストール」が動きません。

この手順は、 最初のイメージとしてNano Server(最小構成のWindows Server 2016)ベースイメージをダウンロードし、 それを登録するものです。 現状のWindows 10のコンテナ機能は、 リポジトリからのpullが実装されていないため、手動でこれを行うわけですね。

手順には以下のコマンドを実行しろとありますが、

docker load -i nanoserver.tar.gz

実際に実行してみると、エラーになります。

PS C:\Temp>docker load -i nanoserver.tar.gz
58684737b3d1: Loading layer [==================================================>] 358.4 MB/358.4 MB
re-exec error: exit status 1: output: ProcessUtilityVMImage C:\ProgramData\Docker\windowsfilter\facecd91a2eee5e77d3046e9
a4b63daffe037fc96725e6d6ca5b847ebde016ce\UtilityVM: The process cannot access the file because it is being used by anoth
er process.

素直に受け取ると、 一時ファイルをクローズせずに次の工程へ渡している単純ミスっぽいけど。

回避法

見つけられていません。 まあ、どうせすぐ直すだろうと諦めた。

MSDNの「Windows Containers」フォーラムで同じ問題が報告されていましたので、 Voteしました。

re-exec error when trying to load nanoserver image (MSDN "Windows Containers" Forum)

でも他にVote無いんだけど、みんなちゃんと動いているのかな。

他に気になる点

Windows 10のコンテナ機能に対し、 ユーザー権限(非管理者権限)でdockerコマンドを実行するとエラーになります。 こんな感じ。

PS C:\Temp> docker version
Client:
Version: 1.13.0-dev
API version: 1.25
Go version: go1.6.3
Git commit: 87e48ec
Built: Wed Aug 3 20:33:19 2016
OS/Arch: windows/amd64
An error occurred trying to connect: Get http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.25/version: open //./pipe/docker_engin
e: Access is denied.

Docker Engine相当のものがWindowsサービスとして動いており、 それと通信するための名前付きパイプのアクセス権が管理者に限定されているのでしょう。

dockerコマンドによって危険なコンテナを動かすこともできますし、 dockerコマンドに管理者権限が必要だというのは分かります。 まあ、もうちょっとユーザー向けなエラーメッセージ出したほうがいいんじゃない、というのはあるけど。

でも、 Linuxでのdockerの使われ方を参考にするなら、 グループを作ってそのグループのユーザーのみアクセスできる、 という形態にしないと、 使い勝手が悪くなるんじゃないかなあ。

一方、 Docker for Windowsは、 現状ユーザー権限でdockerコマンドが問題なく動いてしまいます。 こっちはこっちで心配になる。

« Docker for Windowsで"Network timed out"と言われてイメージを取ってこれない問題 | トップページ | Windows 10のコンテナ機能とDocker for Windowsを共存させる上での問題点(追記あり) »

Windows」カテゴリの記事

覚え書き」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/595179/64012603

この記事へのトラックバック一覧です: Windows 10のコンテナ機能(Docker for Windowsじゃないよ)が動かない話と気になった点:

« Docker for Windowsで"Network timed out"と言われてイメージを取ってこれない問題 | トップページ | Windows 10のコンテナ機能とDocker for Windowsを共存させる上での問題点(追記あり) »