LDAP Account Manager (LAM) のDockerコンテナの設定を永続化する

プログラミングor技術
LDAPの設定をGUIで弄れる LDAP Account Manager (LAM) というツールがあります。
すぐ使えるDockerイメージ ldapaccountmanager/lam が存在しますが、コンテナを再起動するとLAMの設定がリセットされるので、設定の永続化が必要です。 その方法のメモです。

永続化すべきもの

結論からいって以下の2つだと思います。(もっとファイルやディレクトリを絞れるかもしれませんが、大雑把にしました)
  • /var/lib/ldap-account-manager/config/
  • /etc/ldap-account-manager/

理由

どのファイルを永続化すればいいかについては、 同イメージのGithubに載せられてる docker-compose.yaml が参考になります。 その中では /var/lib/ldap-account-manager/config/ を永続化させています。
しかし、configディレクトリを見てみると /etc/ldap-account-manager/config.cfg へもシンボリックリンクが張られています。
config.cfgの中を見ると、LAM上から変えられる一部の設定が入ってるようでした。また同階層にはいくつかの他にも設定ファイルがおかれていました(LAM自体の設定ファイルではなさそうですが) ということで一応 config.cfg が入ってる /etc/ldap-account-manager/も永続化したほうがよさげと判断しました。

永続化の方法

Docker Volumeを使用

同イメージのGithubに載せられてる docker-compose.yaml  のようにVolumeを使用するのが一番簡単かつラクです。 同docker-compose.yamlでいうldap-account-managerコンテナのボリューム設定を以下のようにします。
    volumes:
      - lamconfig/:/var/lib/ldap-account-manager/config
      - etc-lamconfig/:/etc/ldap-account-manager
一番下の volumes: の設定を以下のようにします。
volumes:
  lamconfig:
  etc-lamconfig:
  ldap:
  slapd: 
これで特に問題なく実行できます。

Docker バインドマウントを使用

こちらはホストのディレクトリをコンテナ内にバインドマウントする方法ですが、面倒なのでオススメしません。 設定は、 同イメージのGithubに載せられてる docker-compose.yaml  の ldap-account-managerコンテナのボリューム設定を以下のようにします。
    volumes:
      - ./lamconfig/:/var/lib/ldap-account-manager/config
      - ./etc-lamconfig/:/etc/ldap-account-manager
一番下の volumes: の設定を以下のようにします。
volumes:
  ldap:
  slapd: 
そしてホストのしかるべき場所に ディレクトリ lamconfigetc-lamconfig を作成します。適切なパーミッションやオーナー、グループ等の属性を設定してください。
適切な属性の例 (ディレクトリ名が説明と少し違うけど…)
面倒なのはここからです、そのディレクトリが空の場合は動作しません。中身を用意してやる必要があります。
(設定ファイルが空の場合は再生成してくれるツールやDockerイメージもありますが、これはしてくれないのか、こちらの使い方が悪くて失敗してるのかは不明です。) 中身を用意しないと、以下のようなエラーが出ます。
PHP Notice: A non well formed numeric value encountered in Command line code on line 1
sed: can't read /etc/ldap-account-manager/config.cfg: No such file or directory
(↑ /etc/ldap-account-manager/の中身を用意しなかったときのエラー )
PHP Notice: A non well formed numeric value encountered in Command line code on line 1
ls: cannot access '/var/lib/ldap-account-manager/config/lam.conf': No such file or directory
cp: cannot stat '/var/lib/ldap-account-manager/config/unix.sample.conf': No such file or directory
(↑ /var/lib/ldap-account-manager/config/ の 中身を用意しなかったときのエラー ) 中身を用意するときは docker cp コマンドで、動いてるLAMのコンテナから var/lib/ldap-account-manager/config/ /etc/ldap-account-manager/ の中身をコピーするとよいです。
その場合、パーミッションは維持されますが、ファイルのオーナー等までは維持されない ので注意してください。修正する必要があります。 ファイル・ディレクトリの属性を修正するのがめんどうな場合…
まずホスト側の適当なディレクトリを、コンテナ内の(新規の)適当なディレクトリにバインドマウントします。そこにコンテナ内の /var/lib/ldap-account-manager/config/ /etc/ldap-account-manager/ を、 丸っとコピーしてホスト側に持ってくればOKです。 コピーにはコンテナのシェルから cp -a コマンドを使います。
パーミッションやオーナー等はそっくり同じになります。

トラブルシュート


LAMの画面をブラウザで開いたとき、 エラー「 Please enter the configuration and create a server profile. 」や「The main config file (config.cfg) does not exist.」 が(ちゃんとファイルはあるのに)出る場合は、ファイル・ディレクトリのオーナー、グループやパーミッション等の属性がおかしいかもしれません。
動いてるLDAPコンテナ等を参考にファイル・ディレクトリの属性を修正しましょう。 例として、Dockerイメージ ldapaccountmanager/lam でデフォルトで作成される、コンフィグやプロファイル関連のファイル・フォルダの属性は以下の通りです。
/var/lib/ldap-account-manager/
/var/lib/ldap-account-manager/config

コメント