Ubuntu Dockerイメージでsystemd
がアクティブでないか、利用できないようです。
ubuntu:16.04
およびubuntu:16.10
イメージからDockerコンテナーを実行しています。
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
は16.10
でsystemctlを見つけますが、systemctl status ssh
は引き続きエラーFailed to connect to bus: No such file or directory
を返します
私の主な質問は次のとおりです。UbuntuDockerイメージで使用するためにsystemdとsystemctlをアクティブにするにはどうすればよいですか?
Ubuntu Dockerコンテナでsystemdがアクティブにならないのはなぜですか? systemdはコンテナのインスタンス化には使用されませんか?
Ubuntu/Ubuntu Dockerイメージに関するこのトピックに関するドキュメントは見つかりませんでした。Upstart
からsystemd
へのUbuntuの移行に関する情報のみです。完全な説明を提供するドキュメントはありますか?
これは仕様です。 Dockerは、コンテナのフォアグラウンドでプロセスを実行する必要があり、コンテナのpid名前空間内でPID 1として生成されます。 DockerはOSの仮想化ではなくプロセスの分離のために設計されているため、コンテナー内で実行される他のOSプロセスやデーモン(systemd、cron、syslogなど)はなく、実行するエントリポイントまたはコマンドのみです。
Systemdコマンドが含まれている場合、エントリポイントがinitに置き換わるため、多くのものが機能しないことがわかります。 Systemdは、cgroupを変更する機能により、プロセスがコンテナの隔離から逃れることができるため、コンテナ内でdockerが制限するcgroupも使用します。 systemdがコンテナ内でinitとして実行されていない場合、開始コマンドと停止コマンドを処理するデーモンはありません。