Docker Desktop for Windows で「Unable to create: ユーザー設定変数 “ErrorActionPreference” または共通パラメーターが Stop に設定されているため、実行中のコマンドが停止しました。」というエラーが出た時の対処方法

こんにちは。エクセルソフトの田淵です。

プロダクトのテストや検証をするのに Docker は便利ですよね。私も Mac では Docker を使っていました。

Windows では Xamarin や Kudan 用の Android Emulator が Intel HAXM で動いていたので Docker は使えず。だったのですが、2018年5月に The Visual Studio Blog | Hyper-V Android emulator support の発表があり、Hyper-V で Android Emulator が使えるようになっています。Windows で Web 開発、Mobile 開発をしている方は Docker Desktop for Windows を使用すると幸せになれると思います。

さて、本題です。

「Unable to create: ユーザー設定変数 “ErrorActionPreference” または共通パラメーターが Stop に設定されているため、実行中のコマンドが停止しました。」というエラーで Docker が起動しないことがある場合の対処方法

2019/2/27 追記:
私の環境での問題の原因がわかりました。
「マシン名が 15文字だったこと。」
です。弊社は AD とか使ってなくて NetBios で名前解決してるんですが(中小だとそういう環境もあるはず。)、NetBios だとマシン名は 14文字までの制限があります。
ログにあった Hyper-V\New-VM : コンピューター '<マシン名>' を解決できませんでした。 の ‘<マシン名>’ が本来のマシン名から 1文字少ないのに今日気が付きました…
マシン名を 14文字以内にして数回再起動しましたが、問題は発生していません。
こんな別の問題だったなんて… という感じですね。
2019/4/10 追記:
まだ時々エラーが出ます。これは別のマシン名が解決できないのではなく、別の原因なので、下に書いた方法を試してみて様子見ですね。。

システム

  • Windows 10 1803
  • Docker version 18.09.2, build 6247962

何が起きているのか?

最近、上記のエラーが良く出るようになりました。

[code]
Unable to create: ユーザー設定変数 "ErrorActionPreference" または共通パラメーターが Stop に設定されているため、実行中のコマンドが停止しました。仮想ハード ディスクを作成できませんでした。

システムで ‘C:\Users\Public\Documents\Hyper-V\Virtual Hard Disks\MobyLinuxVM.vhdx’ を作成できませんでした。

仮想ハード ディスクを作成できませんでした。

システムで ‘C:\Users\Public\Documents\Hyper-V\Virtual Hard Disks\MobyLinuxVM.vhdx’ を作成できませんでした: ファイルがあります。 (0x80070050)。
Ensure-VHD-Path、<ファイルなし>: 行 306
New-MobyLinuxVM、<ファイルなし>: 行 208
<ScriptBlock>、<ファイルなし>: 行 411
場所 Docker.Core.Pipe.NamedPipeClient.Send(String action, Object[] parameters) 場所 C:\workspaces\stable-18.09.x\src\github.com\docker\pinata\win\src\Docker.Core\pipe\NamedPipeClient.cs:行 36
場所 Docker.Actions.DoStart(SynchronizationContext syncCtx, Boolean showWelcomeWindow, Boolean executeAfterStartCleanup) 場所 C:\workspaces\stable-18.09.x\src\github.com\docker\pinata\win\src\Docker.Windows\Actions.cs:行 92
場所 Docker.Actions.<>c__DisplayClass19_0.<Start>b__0() 場所 C:\workspaces\stable-18.09.x\src\github.com\docker\pinata\win\src\Docker.Windows\Actions.cs:行 74
場所 Docker.WPF.TaskQueue.<>c__DisplayClass19_0.<.ctor>b__1() 場所 C:\workspaces\stable-18.09.x\src\github.com\docker\pinata\win\src\Docker.WPF\TaskQueue.cs:行 59
[/code]

ErrorActionPreference で検索してみると、GitHub の Issue で同じようなエラーがたくさん見つかりました。

Issues · docker/for-win

なのですが、

などと少しずつ原因が違うようです。

対処法その1

1809 で Hyper-V Manager にアクセスできないという問題が発生している場合は、

Hyper-V Doesn’t Work After Upgrade to Windows 10 1809

の 制御フローガード(CFG) の問題かもしれません。Qiita で日本語の記事を書いてくださっている方もいましたので参考にして設定してみてください。

Docker for Windowsで起動エラーが起きた場合の対処 - Qiita

対処法その2

Docker Desktop for Windows の「Settings>Network>DNS Server」を「Fixed 8.8.8.8」にする。

これは私の場合ですが、GitHub の Issue を見ていると、C:\Program Files\Docker\Docker\resources の PowerShell スクリプト MobyLinux.ps1 でネットワーク作成、VHD 作成、起動、停止などを司っているようでしたので、PowerShell でこのスクリプトを弄ってみました。

PowerShell を実行するには実行ポリシーの設定が必要ですので、
公式ドキュメント:Set-ExecutionPolicy

日本語の丁寧な解説記事:PowerShellのExecutionPolicyのスコープとかについて詳しく - Qiita
をご覧いただき、適切に設定してください。
MobyLinux.ps1 では、Hyper-V の仮想ネットワークを作成したりする関係で、管理者権限の PowerShell でログインする必要はありますw

[code lang=text]
PS C:\Program Files\Docker\Docker\resources> .\MobyLinux.ps1 -Destroy
Script started at 13:09:19.024
Modules loaded at 13:09:22.173
Stopping VM MobyLinuxVM…
Turn Off VM …
VM MobyLinuxVM killed. Waiting for state to change
Killed VM MobyLinuxVM is off
Destroying Switch DockerNAT…
Removing VM MobyLinuxVM…
Destroying Switch DockerNAT…
Removing VM MobyLinuxVM…
Delete VHD C:\Users\Public\Documents\Hyper-V\Virtual Hard Disks\MobyLinuxVM.vhdx
[/code]

Destroy はできますね。次は Create です。

[code lang=text]
PS C:\Program Files\Docker\Docker\resources> .\MobyLinux.ps1 -create
Script started at 15:44:28.222
Modules loaded at 15:44:28.241
Creating Switch: DockerNAT…
Switch created.
Set IP address on switch
Creating VM MobyLinuxVM…
Hyper-V\New-VM : コンピューター '<マシン名>' を解決できませんでした。マシン名を正しく入力したことと、ネットワークにアクセスできることを確認して
ください。
発生場所 C:\Program Files\Docker\Docker\resources\MobyLinux.ps1:191 文字:15
+ $vm = Hyper-V\New-VM -Name $VmName -Generation 2 -NoVHD
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [New-VM], VirtualizationException
+ FullyQualifiedErrorId : Unspecified,Microsoft.HyperV.PowerShell.Commands.NewVM
[/code]

なるほど…?私の環境で出ていた「仮想マシンが作れない」ってエラーは権限とかではなく、ネットーワークで名前解決ができていないからですかね?

確かに自社のネットワークは Domain 入れてないので IPv4 だったり IPv6 だったりが不安定なので、試しに

[code lang=text]
PS C:\Program Files\Docker\Docker\resources> ping -4 <マシン名>
[/code]

やってからもう一回 Create

[code lang=text]
PS C:\Program Files\Docker\Docker\resources> .\MobyLinux.ps1 -create
Script started at 15:44:59.775
Modules loaded at 15:44:59.801
Using existing Switch: DockerNAT
Using existing Switch IP address
Creating VM MobyLinuxVM…
Setting CPUs to 2 and Memory to 2048 MB
Creating dynamic VHD: C:\Users\Public\Documents\Hyper-V\Virtual Hard Disks\MobyLinuxVM.vhdx
Attach VHD C:\Users\Public\Documents\Hyper-V\Virtual Hard Disks\MobyLinuxVM.vhdx
Connect Internal Switch DockerNAT
Attach DVD .\docker-for-win.iso
Disabled ゲスト サービス インターフェイス
Enabled ハートビート
Disabled キー値ペア交換
Enabled シャットダウン
Enabled 時刻の同期
Disabled VSS
VM created.
[/code]

すんなり作れました。ネットワーク関連でエラーが出ているときは、設定の DNS を変更すると直る可能性があります。

対処法その3

高速スタートアップを切る。

Docker for Windowsの挙動がおかしい時の対処

こんなのもありました。

対処法その4

Windows 再起動。

いつものやつですね。

まとめ

具体的に何が原因か?というのが分からないのが非常につらいところですが、Windows 再起動は除いて、3つとも全部やってみて今のところ安定している気がします。

Docker Desktop for Windows でしょっちゅうエラーが出るなーって方は参考にしてみてください。

最後に

弊社では Docker Enterprise を取り扱っております。RHEL では Docker CE はサポートされていないため(Docker Hub の検索結果)、公式のサポートを受けたい場合は、Docker Enterprise の購入が必要になります。お見積りなどのご依頼は @ytabuchi または弊社問い合わせフォーム よりお気軽にお問い合わせください。

以上です。

タイトルとURLをコピーしました