1. はじめに
Windows 11 に Ubuntu をインストールし、docker を実行してエラーを報告します。インストール手順は次のとおりです。
Windows11 Microsoft Store は ubuntu サブシステムをインストールします
Linux Ubuntu は Docker をインストールします
Windows で WSL とともに Ubuntu を使用する場合、systemctl コマンドを使用するとエラーが発生します。
hh@LAPTOP-O6A604DC:~$ systemctl start docker
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down
2.問題分析
この Ubuntu システムでは systemd が使用されておらず、システムの初期化に SysV init (sysvinit) が使用されている可能性があります。
次のコマンドで表示できます:
ps -p 1
その場合、CMD 列に init と表示され、SysV init 初期化システムが使用されていることを示します。
SysV init: システムが初期化システムとして SysVinit を使用している場合は、service コマンドを使用してサービスのステータスを管理および確認できます。たとえば、Docker サービスのステータスを確認するには、次を実行できます。
sudo service docker status
Systemd とは何ですか?
Systemd は、Linux システムの基本的な構成要素のセットです。これは、PID 1 として実行され、システムの残りの部分を起動するシステムおよびサービス マネージャーを提供します。
systemctl は、systemd のツールとして、Linux マシン上のサービスとの対話を提供します
3.問題解決
3.1. オプション 1:
それでも systemd を使用したい場合は、WSL で systemd を有効にしてください
前提条件: Microsoft Store からバージョン番号 0.67.6 以降の WSL を実行していることを確認してください< a i=2> WSL を最新バージョンに更新します
wsl --update
バージョンを表示
wsl --version
WSL 2 をデフォルト バージョンとして設定します WSL1 の場合、デフォルトで wls.conf ファイルもありますが、systemtcl コマンドはサポートされていないため、WLS に設定する必要があります
wsl --set-default-version 2
コマンドを実行してバージョンを表示する
wsl -l -v
Ubuntu インスタンスで、/etc/wsl.conf ファイルを開くか追加し (これはすでにここにインストールされていますが、インストールされていない場合は手動で追加します)、内容を次のように編集します。
[boot]
systemd=true
次に、wsl --shutdown コマンドを使用して、実行中の Linux ディストリビューションをシャットダウンします。
Ubuntu を再実行します。
初期化情報を再度確認すると、systemd が使用されていることがわかります。
クエリ systemctl バージョンを実行します。完璧で使用できます。
正常に開始され、クエリは正常です。
3.2. オプション 2:
このエラーは、システムが初期システム (PID 1) として systemd を使用して起動されていないことを示します。これは、システムが別の init システム (Upstart や SysVinit など) を使用していることが原因である可能性があります。したがって、systemctl コマンドは systemd に依存しているため、このコマンドを使用しようとすると問題が発生します。
システムが init システムとして systemd を使用していない場合は、init システムに適切なコマンドを使用してサービスのステータスを確認する必要があります。一般的な init システムの例をいくつか示します。
Upstart: システムが初期化システムとして Upstart を使用している場合は、initctl コマンドを使用してサービスのステータスを確認できます。たとえば、Docker サービスのステータスを確認するには、次のコマンドを実行できます。
sudo initctl status docker
SysVinit: システムが初期化システムとして SysVinit を使用している場合は、service コマンドを使用してサービス ステータスを管理および確認できます。たとえば、Docker サービスのステータスを確認するには、次のコマンドを実行できます。
sudo service docker status
結果は利用可能で有効です
正常に開始され、クエリは正常です
4. 両方のコマンドがクエリおよび使用可能であり、完全であることを確認します。
官方文档:
https://learn.microsoft.com/zh-cn/windows/wsl/install-manual
参考帖子:
https://blog.csdn.net/B11050729/article/details/132498547
https://blog.csdn.net/m0_68736501/article/details/130289727
https://blog.csdn.net/qq_44610529/article/details/126488898
https://blog.csdn.net/weixin_41982608/article/details/132310451