💡

Windows コンテナのトラブルシューティング

2021/09/02に公開

Sitecore の Windows コンテナを利用するにあたり起きた問題の原因と対処をこちらに記載していきます。

Sitecore を利用時に起こったことがほとんどですが、 Windows コンテナ利用時に一般的に起こりうることなので、なにかの参考になれば幸いです。

ERROR: for cortexprocessingworker Container "xxxxxx" is unhealthy. が発生

様々な要因があります。詳細はログを確認する必要があります。

「mssql-data フォルダの権限不足

大半はこの原因です。
次のリンクの「mssql-data に NETWORK SERVICE ユーザーの権限を追加」の手順を実施してください。SQL Server の権限が不足しています。

https://zenn.dev/nnasaki/articles/f582a3a547c3f0#mssql-data-に-network-service-ユーザーの権限を追加

ライセンスファイルの期限切れ

ライセンスファイルの期限が切れている場合があります。 docker-compose logs で以下エラーが発生していないかご確認ください。

ライセンスファイルの更新を行うことで解消します。

id_1                      | Unhandled Exception: Sitecore.Framework.Runtime.Licensing.Exceptions.SitecoreLicenseInvalidOperationException: Invalid or expired license. [Raw]
id_1                      |    at Sitecore.Framework.Runtime.Licensing.LicenseValidator.LoadLicense(License license)
id_1                      |    at Sitecore.Framework.Runtime.Commands.SitecoreHostCommand.OnExecuteAsync(CommandLineApplication app)
id_1                      |    at McMaster.Extensions.CommandLineUtils.Conventions.ExecuteMethodConvention.InvokeAsync(MethodInfo method, Object instance, Object[] arguments)
id_1                      |    at McMaster.Extensions.CommandLineUtils.Conventions.ExecuteMethodConvention.OnExecute(ConventionContext context, CancellationToken cancellationToken)
id_1                      |    at McMaster.Extensions.CommandLineUtils.Conventions.ExecuteMethodConvention.<>c__DisplayClass0_0.<<Apply>b__0>d.MoveNext()
id_1                      | --- End of stack trace from previous location where exception was thrown ---
id_1                      |    at McMaster.Extensions.CommandLineUtils.CommandLineApplication.ExecuteAsync(String[] args, CancellationToken cancellationToken)
id_1                      |    at McMaster.Extensions.CommandLineUtils.CommandLineApplication.ExecuteAsync[TApp](CommandLineContext context, CancellationToken cancellationToken)
id_1                      |    at Sitecore.Program.<Main>(String[] args)

ERROR: for sitecore-xp0_xconnect_1 Cannot start service xconnect: container xxxxx encounterd an error duaring hcsshim::System::Start: failure in a Windows system call: The virtual machine or container exited unexpectedly. (0xc0370106) が発生

初回起動時に稀に起こります。もう一度 docker-compose up -d をすることで解消します。

ERROR: for sitecore-xp0_treafik_1 Cannot start service treafik: hcsshim::CreateComputeSystem xxxxxxxxxxxx: The virtual machine could not be started because a required feature is not installed.

Azure などで CPU が AMD 系など、入れ子になった仮想化をサポートしていない VM を利用すると発生します。
対処は2つあります。

  1. .env の TRAEFIK_ISOLATION=hypervTRAEFIK_ISOLATION=default に変更。
  2. 入れ子になった仮想化をサポートしている VM を利用する。次のリンク先の *** (アスタリスク3つ)がついているマシンを選択する。例えば Dsv4 など。
    https://docs.microsoft.com/ja-jp/azure/virtual-machines/acu

これは Azure VM など、元々 Hyper-V 上で動いており、そこからさらに Hyper-V のコンテナを立ち上げるため「入れ子になった仮想化」のサポートが必要になるためです。入れ子になった仮想化は現在 Intel と AMD EPYC/Ryzen プロセッサ以降のみサポートされています。
https://docs.microsoft.com/ja-jp/virtualization/hyper-v-on-windows/user-guide/nested-virtualization

compose-init.ps1 : A parameter cannot be found that matches parameter name 'AllowPrerelease'.

compose-init.ps1 実行時に発生しました。詳細なエラーは次の通りです。

PS > .\compose-init.ps1 -LicenseXmlPath C:\License\license.xml
C:\Users\nnasaki\source\Sitecore\releases\SitecoreContainerDeployment.10.2.0.006766.683\compose\ltsc2019\xp0\compose-init.ps1 : A parameter cannot be found t
hat matches parameter name 'AllowPrerelease'.
At line:1 char:1
+ .\compose-init.ps1 -LicenseXmlPath C:\License\license.xml
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [compose-init.ps1], ParameterBindingException
    + FullyQualifiedErrorId : NamedParameterNotFound,compose-init.ps1

対処はPowerShellの以下コマンドを実行して、モジュールを更新を行います。

Install-Module -Name PackageManagement -Repository PSGallery -Force -AllowClobber
Install-Module -Name PowerShellGet -Repository PSGallery -Force -AllowClobber

PowerShellを立ち上げなおして再度実行したところ、うまくいきました。

Docker Desktop failed to stop

Windows 10 で Docker Desktop を利用しているときに発生。

WSL に Docker が残っているのが原因。wsl --unregister docker-desktop で一度削除して、再度 Docker を立ち上げなおすことで解消

Sitecore Docker のトラブルシューティング

Sitecore ドキュメントの Docker のトラブルシューティングを参照してみてください。
https://doc.sitecore.com/ja/developers/101/developer-tools/troubleshooting-docker.html

Discussion