CentOS7でのdockerの勉強の覚書です。
dockerコンテナにPostgresqlをインストールした際のエラーメッセージ
以下のメッセージが出力されました。
「Failed to get D-Bus connection: No connection to service manager」
色々と調査した結果、CentOS 7ではinitデーモンがsystemdに変わったため、
centos:centos7のDockerイメージを使用した場合に出力されるエラーメッセージのようです。
エラーメッセージの回避策
回避策として、dockerコンテナを作成する際に以下の点に留意する必要があるようです。
・ 特権モードにする(--privileged)
・ コンテナで起動されるコマンドは/sbin/initにする
まず、上記の点を考慮してdockerコンテナを作成する為に、nsenterをインストールする必要が
あるとのことなので、以下のコマンドにてインストールを実行します。
docker run --privileged --rm -v /usr/local/bin:/target jpetazzo/nsenter
インストール後に以下のコマンドにてdockerコンテナを作成、実行します。
docker run --privileged -d -p 80:80 --name {コンテナ名} centos:centos7 /sbin/init
上記方法で作成したコンテナへの接続は通常の方法ではダメとのことなので、以下の方法で接続します。
docker exec -it {コンテナ名} /bin/bash
コンテナ実行後に、以下のコマンドを実行します。
yum install httpd -y
systemctl enable httpd.service
systemctl start httpd.service
Postgresqlのインストール手順
■ wgetコマンドのインストール
yum -y install wget
■ 最新版のPostgresqlのダウンロード
wget http://yum.postgresql.org/9.4/redhat/rhel-7-x86_64/pgdg-centos94-9.4-1.noarch.rpm
■ Postgresqlのインストール
rpm -ivh pgdg-centos94-9.4-1.noarch.rpm
yum -y install postgresql94-server postgresql94-devel postgresql94-contrib
■ データベースクラスタ初期化 ← ここでエラーメッセージが出力されてた・・・。
/usr/pgsql-9.4/bin/postgresql94-setup initdb
■ postgresサービス化 / 開始
systemctl enable postgresql-9.4
systemctl start postgresql-9.4
余談
今回のエラーメッセージを解決させるための調査もろもろに1週間以上かけてしまいました。
(実作業時間でいうと1日程度かもしれませんが・・・。)
今後はこの程度のエラーの調査はさくっと終わらせたいものです。
参考資料
http://qiita.com/yunano/items/9637ee21a71eba197345
http://www.hack-log.net/entry/2015/04/26/100000