発火後忘失

FIRE AND FORGET

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