1. ホーム
  2. ubuntu

[解決済み] ubuntuのDockerコンテナでsystemdが使えない [closed].

2023-05-18 20:58:23

質問

問題点

それは、どうやら systemd は Ubuntu Docker コンテナではアクティブでないか、利用できないようです。

セットアップ

Dockerコンテナを実行するのは ubuntu:16.04ubuntu:16.10 の画像になります。

テスト

実行すると

systemctl status ssh の中で 16,04 コンテナ

その結果、エラー Failed to connect to bus: No such file or directory

の中で 16.10 コンテナでは、エラーは bash: systemctl: command not found .

もし私が which systemctl で systemctl が見つかります。 16.04 コンテナの中にありますが 16.10 コンテナ内ではありません。

に目をつけました。 /lib/systemd が存在することを確認しました。

でsystemdのインストールを試しました。

apt-get install systemd libpam-systemd systemd-ui

次に which systemctl で systemctl を見つけます。 16.10

しかし systemctl status ssh はまだエラーを出します。 Failed to connect to bus: No such file or directory

質問

Ubuntu Docker イメージで使用するために systemd と systemctl を有効にするにはどうしたらよいですか?

なぜ Ubuntu Docker コンテナでは systemd がアクティブにならないのでしょうか?コンテナのインスタンス化で systemd は使用されないのでしょうか?

このトピックに関する Ubuntu / Ubuntu Docker イメージのドキュメントを見つけることができず、Ubuntu の移行に関する情報のみから Upstart から systemd . 完全な説明を与えるドキュメントはありますか?

どのように解決するのですか?

これは設計によるものです。Docker はコンテナ内でフォアグラウンドでプロセスを実行しているはずで、それはコンテナの pid 名前空間内で PID 1 として生成されます。Docker は OS 仮想化ではなくプロセス分離のために設計されているため、コンテナ内では他の OS プロセスやデーモン (systemd, cron, syslog など) は実行されず、エントリポイントまたは実行したコマンドのみが存在します。

もし systemd コマンドが含まれていたら、エントリーポイントが init を置き換えるので、多くのものが動作しないことがわかると思います。Systemd はまた、docker がコンテナ内部で制限している cgroups を利用します。cgroups を変更する能力があれば、コンテナの隔離からプロセスが逃れることができるからです。コンテナ内で systemd が init として動作していないと、起動や停止コマンドを処理するデーモンが存在しません。