CentOS7ベースのDockerコンテナで--privileged無しでPostgreSQLを動かしたい
CentOS7ベースのDockerイメージで作成したコンテナの中で systemctl
コマンドを実行すると次のエラーが出て失敗します。
Failed to get D-Bus connection: No connection to service manager.
検索すると docker run
コマンドに --privileged
オプションを付けると良い、なんて書かれているのをよく見かけますが、特権モードなんて名前のオプションを軽々しく使って良いものか、リファレンス読んでもよくわからないし…
と思いつつ情報を探していたのですが、CentOSプロジェクトオフィシャルなPostgreSQLイメージ用Dockerfileがありました。
CentOS-Dockerfiles/postgres/centos7 at master · CentOS/CentOS-Dockerfiles
systemctl
コマンド使わずに済むようスクリプトを書き換えて対応している感じです。
PostgreSQL以外でも systemd
経由で起動していたサービスは同じように対応できる気がします(そもそもオフィシャルDockerfileが用意されていたりも)。
以下、今回の本筋とは関係ないのですが、
Bug 1033604 - Unable to start systemd service in Docker container
のリンクに、 --privileged
オプション無しで systemd
を起動する、というエントリがありました。
Run systemd in an unprivileged(!!!) docker container | maci's random stuff