Dockerのトラブルシューティング
このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。
このトピックでは、Docker Desktop for WindowsおよびDockerベースのSitecore開発に関する問題のトラブルシューティングに関するアドバイスを提供します。 Dockerツールとリソース : トラブルシューティングのディスカッションを見つけることができる多くのリソースとコミュニティ サイトへのリンクです。
一般的なトラブルシューティング手順
-
ログを確認します。 丸太は最初に見る場所です。問題に応じて、コンテナのログまたはエンジンのログを確認します。コンテナ ログへのアクセスについては、Sitecore Dockerチート シートを参照してください。ログは、Docker Desktop (ダッシュボード)や上記の他のツールで表示することもできます。
Sitecore CMおよびCDイメージの場合、デフォルトではすべての組み込みSitecoreログ ファイルがストリーミングされるわけではありません。それらをLogMonitor設定 (c:\LogMonitor\LogMonitorConfig.json) に追加できますが、出力が過剰になる可能性があります。Docker Examplesリポジトリに示されているように、Sitecoreログ フォルダーをバインド マウントすると便利です。
RequestResponsecm: [...] volumes: - ${LOCAL_DATA_PATH}\cm:C:\inetpub\wwwroot\App_Data\logs
Dockerエンジン (デーモン) のログはC:\Users\%USERNAME%\AppData\Local\Dockerにあります。
-
Docker Desktop を再起動します。多くの場合、Docker Desktopを再起動すると問題が解決します。WindowsシステムトレイのDocker項目 (クジラのアイコン) を使用して再起動できます。
-
マップされたボリューム・データをクリーンアップします。コンテナが永続ストレージにマップされたボリュームを使用している場合、問題はこれらのフォルダ内の古いデータに起因する可能性があります。デフォルトのSitecore設定では、mssqlサービスとsolrサービスでこれを有効にします。インスタンスがダウンしていることを確認し (docker-compose down)、マウントされたフォルダー内のファイルを手動で、またはクリーンなスクリプトを使用して削除します (Docker Examplesリポジトリのclean.ps1例を参照)。
-
Prune Docker リソース:最近まだ行っていない場合は、未使用のDockerリソースをクリーンアップします。これは、少なくともディスクスペースを解放するために、毎日の習慣として適しています。
RequestResponsedocker system prune
詳細については、Sitecore Dockerチート シート を参照してください。
-
PCを再起動します。 システムを再起動すると、いくつかの問題を解決できます。
-
最新の Docker Desktop for Windows にアップグレードします。Dockerは、バグ修正と改善を行ったDocker Desktop for Windowsの新しいバージョンを継続的にリリースしています。更新は、WindowsシステムトレイのDockerアイテム(クジラのアイコン)を使用して確認できます。
-
Docker Desktop を工場出荷時のデフォルトにリセットします。これにより、Docker Desktopのすべてのオプションが、Docker Desktopが最初にインストールされたときと同じ初期状態にリセットされます。これは、WindowsシステムトレイのDockerアイテム(クジラのアイコン)のトラブルシューティングオプションから実行できます。
コンテナ環境のメモリ使用量
Sitecoreコンテナを使用する場合、開発者ワークステーションには32GBのメモリを推奨し、最小では16GBを推奨します。システム・メモリーの不足が原因でエラーやパフォーマンスの問題が発生している場合は、以下の手法を使用して、環境のメモリー使用量の削減を試みることができます。
-
XP1ではなくXM1またはXP0トポロジを実行します。
-
XM0で変更されたXM1トポロジを実行します (開発用のみ)。これを行うには、環境変数を使用してredisサービスとcdサービスをscale: 0に設定し、cmサービスをスタンドアロン モードに設定しますSitecore_AppSettings_role:define 。
RequestResponseredis: [...] scale: 0 cd: [...] scale: 0 cm: [...] environment: Sitecore_AppSettings_role:define: Standalone
-
1909コンテナーでプロセス分離を実行できるWindows 10バージョンを実行している場合は、1909ベースのSitecoreコンテナーに切り替え、SITECORE_VERSION環境変数とISOLATION環境変数を使用してプロセスを分離します。
RequestResponseSITECORE_VERSION=10.0.0-1909 ISOLATION=process
-
個々のコンテナの メモリ制限 を設定します。Dockerはデフォルトで1GBを使用しますが、特定のサービスでは1GBを削減できます。ただし、mssqlやsolrサービスでは行わないでください。
-
不要なコンテナのサービスを無効にします。たとえば、XP1トポロジで、マーケティング オートメーション エンジンを使用しない場合はxdbautomation、xdbautomationrpt、xdbautomationworkerを無効にし、Cortexを使用しない場合はcortexprocessing、cortexreporting、cortexprocessingworkerを無効にします。これを行うには、サービスをscale: 0に設定し、depends_on条件を削除します。
ウイルス対策ソフトウェアのインストール時にDocker Desktopが起動しない
Dockerデータディレクトリ(%ProgramData%\docker)をウイルス対策ソフトウェアのスキャンから除外してみてください。詳細については、https://docs.docker.com/engine/security/antivirus/ を参照してください。
Windowsコンテナがインターネットにアクセスできない
これは、NuGetの復元操作の接続エラーなど、さまざまな形で現れる可能性があります。
https://github.com/docker/for-win/issues/2760#issuecomment-430889666から:
これは、ホストに複数のネットワーク アダプター (イーサネット、Wi-Fi) が存在する場合によく発生します。Windowsネットワーク スタックがゲートウェイ ルートを正しく選択するには、これらのアダプターの優先度を適切に設定する必要があります。これを修正するには、インターネットに接続されたプライマリ ネットワーク アダプターのInterfaceMetric値を最小に設定します。
Get-NetIPInterface -AddressFamily IPv4 | Sort-Object -Property InterfaceMetric -Descending
このコマンドを使用して変更を加えます (この例では、プライマリ アダプタInterfaceAliasが 'Wi-Fi'であると仮定します)。
Set-NetIPInterface -InterfaceAlias 'Wi-Fi' -InterfaceMetric 3
Hyper-Vに外部仮想スイッチが設定されているためにホストのプライマリ ネットワーク アダプターがブリッジされている場合は、外部仮想スイッチのInterfaceMetric値が最小になるように設定します。
ルーティング・テーブルは、次のコマンドを使用して確認できます (最後の行には、プライマリ・アダプターのゲートウェイ・アドレスとそのifMetric値が表示されます)。
Get-NetRoute -AddressFamily IPv4
ポートが使用中 / 「プロセスがファイルにアクセスできません」
Sitecore環境を起動しようとすると、次のようなエラーが表示される場合があります。
ERROR: for myproject_traefik_1 Cannot start service traefik: failed to create endpoint myproject_traefik_1 on network myproject_default: failed during hnsCallRawResponse: hnsCall failed in Win32: The process cannot access the file because it is being used by another process. (0x20)
このエラーは、IISまたは必要なポートを使用する他のプロセスを停止する必要があることを示しています。必要なポートの完全なリストについては、「 初めてのSitecoreインスタンスの実行」を参照してください。
SQL Server管理者パスワードが無効であることによるエラー
SQL_SA_PASSWORD値は、SQL Serverで指定されている強力なパスワード要件を満たしている必要があります。これらの要件を満たさないパスワードには、次のようなエラーが表示されます。
-
環境内のコンテナの状態が正常でない(XConnect、CM、その他)、および次のような起動エラー:
RequestResponseERROR: for traefik Container <id> is unhealthy. ERROR: Encountered errors while bringing up the project.
-
XConnectコンテナのログのエラー:
RequestResponseMicrosoft.Azure.SqlDatabase.ElasticScale.ShardManagement.ShardManagementException: Store Error: Login failed for user 'sa'.. The error occurred while attempting to perform the underlying storage operation during 'Microsoft.Azure.SqlDatabase.ElasticScale.ShardManagement.StoreException: Error occurred while performing store operation. See the inner SqlException for details. ---> System.Data.SqlClient.SqlException: Login failed for user 'sa'.
-
SQL Serverコンテナ ログのエラー:
RequestResponseVERBOSE: Changing SA login credentials Msg 15118, Level 16, State 1, Server 96FAC1ED734A, Line 1 Password validation failed. The password does not meet the operating system policy requirements because it is not complex enough.
SQL_SA_PASSWORDのSQLパスワードを、既定のSQL Serverポリシーに合わせて変更します。.envファイルのパスワードを変更した後、docker-compose downを実行した後、マウントされたSQLデータフォルダをクリアしてください。その内容を手動で削除することも、クリーンなスクリプトを使用することもできます (Docker Examplesリポジトリのclean.ps1例を参照)。
コンテナが作成済みステータスでスタックしている
通常、このエラーはdocker-compose upを使用した後に表示されます。特定のサービスの実行に失敗し、docker ps -aで確認するとCreatedステータスが報告される場合があります。
この問題を解決するには、Docker Composeファイル内の問題のあるコンテナのメモリ制限を増やしてみてください。Dockerのデフォルトは1GBですが、一部のサービスでは少なすぎる場合があります。たとえば、mssqlサービスとsolrサービスのコンテナには2 GBが必要な場合があります。
mssql:
[...]
mem_limit: 2GB
solr:
[...]
mem_limit: 2GB
Sitecoreに管理者としてログインできない
これは、永続的なSQLデータ ストレージが (Docker Compose設定のマウントされたボリュームを介して) 有効になっており、.envファイルのSitecore管理者パスワード (SITECORE_ADMIN_PASSWORD変数) を変更した場合に発生する可能性があります。パスワードはデータベース・ファイルが最初に作成されたときに設定されるため、パスワードが変更される前にインスタンスが実行されていた場合 (つまり、docker-compose upを使用して実行されていた場合) は古くなっています。
デフォルトのSitecore設定では、ボリュームがmssql-dataフォルダーにマウントされた状態で、これが有効になっています。
mssql:
[...]
volumes:
- type: bind
source: .\mssql-data
target: c:\data
解決するには、インスタンスがダウンしている (つまり、docker-compose down) ことを確認し、マウントされたフォルダ内のファイルを削除します。これらは手動で削除することも、クリーンなスクリプトを使用することもできます (Docker Examplesリポジトリのclean.ps1例を参照)。
正しくない機能エラー
コンテナまたはイメージのビルドを開始するときに、次のエラーが表示される場合があります。
hcsshim::PrepareLayer - failed failed in win32 : Incorrect function. (0x1)
これは、多くの場合、Box、Dropbox、OneDriveなどのツールの互換性のないドライバーが原因です。考えられる回避策と解決策については、GitHubのこのDocker Desktop for Windowsの問題 に関するディスカッションを参照してください。
コンテナのシャットダウンに失敗しましたエラー
コンテナの起動時またはイメージのビルド時に、次のエラーが表示される場合があります。
failed to shutdown container: container 45917373d49ed4130f7c7ac16f19f59379c1c98d0c429cc806a6f292d6792286 encountered an error during hcsshim::System::Shutdown: failure in a Windows system call: The connection with the virtual machine or container was closed. (0xc037010a): subsequent terminate failed container 45917373d49ed4130f7c7ac16f19f59379c1c98d0c429cc806a6f292d6792286 encountered an error during hcsshim::System::waitBackground: failure in a Windows system call: The connection with the virtual machine or container was closed. (0xc037010a)
ほとんどの場合、Docker Desktopを再起動するとこの問題は解決しますが、マシンの再起動が必要になる場合もあります。
GitHubでこのDocker Desktop for Windowsの問題の進行状況をフォローしてください。
ファイアウォールとプロセス分離の競合
特定のファイアウォール構成では、プロセス分離を使用するコンテナが相互に通信できなくなります。症状には、異常なコンテナや、ログを検査する際のコンテナ間のネットワーク通信エラーなどがあります。
特定のファイアウォールの競合を見つけるのが難しい場合があります。回避策として、影響を受ける個々のコンテナをデフォルトの分離に設定できます (たとえば、docker-compose.override.ymlで)。
solr:
[...]
isolation: default