2016/10/17

Windows 10 の Hyper-V コンテナー環境がおかしくなっちゃったら (追記あり)

Windows Server 2016 の Docker の手順が変わってしまいましたが、Windows 10 も対応が必要みたいです。Windows 10 で docker pull microsoft/ほにゃらら (14393.321 イメージ) したときに "failed to register layer: re-exec error: exit status 1: output: hard links not supported with legacy writer" となったり、作成済みのイメージを docker run して固まっちゃうことも。

Using the latest base OS images and updating docker 
[URL] https://social.msdn.microsoft.com/Forums/en-US/54e36123-ff07-4f6a-8b61-e6ce6d358ef7/using-the-latest-base-os-images-and-updating-docker?forum=windowscontainers

によると、Windows Containers on Windows 10 (Last Updated: 10/10/2016) で説明されている Docker 1.13.0-dev (の 10/29 以前にのもの) では、新しいバージョン (10.0.14393.321) のベース OS イメージは扱えないようです。

10/31 追記) 修正版の Docker 1.13.0-dev にバイナリが差し替えられました。 

Docker Master Binaries
[URL] https://master.dockerproject.org/

windows/386/docker-1.13.0-dev.zip     3.789 MB 2016-10-29T18:08:31.000Z

また、Docker 使えるようにするには...

修正版の Docker 1.13.0-dev に差し替えるには...

古い Docker 1.13.0-dev を削除して...

PS C:\> Stop-Service docker
PS C:\> dockerd --unregister-service
PS C:\> ren $env:ProgramFiles\docker $env:ProgramFiles\docker.old


新しい Docker 1.13.0-dev に入れ替えます。

PS C:\> Invoke-WebRequest "https://master.dockerproject.org/windows/amd64/docker-1.13.0-dev.zip" -OutFile "$env:TEMP\docker-1.13.0-dev.zip" -UseBasicParsing
PS C:\> Expand-Archive -Path "$env:TEMP\docker-1.13.0-dev.zip" -DestinationPath $env:ProgramFiles
PS C:\> dockerd --register-service
PS C:\> Start-Service docker

バージョンは 1.13.0-dev で同じですが、Go version のバージョン と Built のタイムスタンプ が新しくなっています。ちなみに、Windows Server 2016 向けの CS Docker のバージョンは  Version: 1.12.2-cs2-ws-beta、API version: 1.25、Go version:  go1.7.1 です。


新しいベース OS イメージが無いかどうか確認します。

PS C:\> docker pull microsoft/nanoserver
PS C:\> docker pull microsoft/windowsservercore

Hyper-V コンテナーを動かしてみます。1.13.0-dev で 14393.321 イメージが動きました。


ドキュメントとの整合性はとれましたが、ひっそりと入れ替えると、以前にやって失敗した人は気が付かないような...

Docker 1.13.0-dev を削除して...

PS C:\> Stop-Service docker
PS C:\> dockerd --unregister-service
PS C:\> ren $env:ProgramFiles\docker $env:ProgramFiles\docke.1.13.0-dev

CS Docker 12.2-cs2-ws-beta に入れ替え...

PS C:\> Invoke-WebRequest "https://download.docker.com/components/engine/windows-server/cs-1.12/docker-1.12.2.zip" -OutFile "$env:TEMP\csdocker-1.12.2.zip"¥" -UseBasicParsing
PS C:\> Expand-Archive -Path "$env:TEMP\
csdocker-1.12.2.zip" -DestinationPath $env:ProgramFiles

PS C:\> dockerd --register-service
PS C:\> Start-Service docker
 ベース OS イメージを更新して...

PS C:\> docker pull microsoft/nanoserver
PS C:\> docker pull microsoft/windowsservercoer

これで回復すると思います。


PS C:\> docker run ...

注:これは、10/12 より前に Windows 10 をコンテナー ホストとしてセットアップしてしまった人向けの情報です。

新規の場合は、Windows Containers on Windows 10 (Last Updated: 10/10/2016) の 手順に従って、Docker バイナリの入手元 URL だけを上記のもの (https://download..../cs-1.12/docker-1.12.2.zip) に変えるだけでいいはず。

一時的な回避方法なので、公式ドキュメントがアップデートされたら、そちらに従ってください。

System Center 2016 UR1 もそうですが、もっと落ち着いてリリースすればいいのに。

で、タグが <none> になっちゃった古いイメージはどうやって削除すればいいのか一瞬悩みましたが、IMAGE ID を指定すれば OK。

次回イメージ更新時に <none> になるのを避けたければ、

PS C:\> docker tag microsoft/nanoserver:latest microsoft/nanoserver:10.0.14393.321

とかでタグ付けしておけばいいと思う。latest のバージョンを知りたければ、

PS C:\> docker inspect microsoft/nanoserver:latest -f="{{.OsVersion}}"

※ コンテナーの中でがんばって確認しても 14393.0 を返すみたい。

0 件のコメント: