Openldap再起動に失敗した復旧試行錯誤

dockerコンテナ osixia/openldap を使っていたが、コンテナを再起動したら即落ちで正常起動しなくなった不具合調査と対応結果。

状況

docker ps -a で見ても EXITED となる。表示されるログは以下の通り。

[root@hoge ~]# docker logs openldap
*** CONTAINER_LOG_LEVEL = 3 (info)
*** Copy /container/service to /container/run/service
*** Search service in CONTAINER_SERVICE_DIR = /container/run/service :
*** link /container/run/service/:ssl-tools/startup.sh to /container/run/startup/:ssl-tools
*** link /container/run/service/slapd/startup.sh to /container/run/startup/slapd
*** link /container/run/service/slapd/process.sh to /container/run/process/slapd/run
*** Set environment for startup files
*** Environment files will be proccessed in this order :
Caution: previously defined variables will not be overriden.
/container/environment/99-default/default.yaml
/container/environment/99-default/default.startup.yaml
~中略~
TLS: could not use CA certificate file `/container/run/service/slapd/assets/certs/ca.crt': Error while reading file. (-64)
61909a9b main: TLS init def ctx failed: -1
61909a9b slapd stopped.
61909a9b connections_destroy: nothing to destroy.
*** /container/run/process/slapd/run exited with status 1
*** Killing all processes...

結論

結論としては問題は3つあった。

  • 設定の上書きを禁止していた
  • TLSを無効化していなかった ※実際に使っているなら残して良い。使っていないのに無効化してなかった
  • 何故かよくわからないがdockerのパラメータHOSTNAMEの扱いに何か変更があった様子

対策

以下の docker パラメータ修正で立ち上がるようになった。

追加

LDAP_TLS: "false"

削除

HOSTNAME: "example.com"
KEEP_EXISTING_CONFIG: "true"

調査経緯

読めぬなら読ませて見せよう…ということで、 /container/run/service/slapd/assets/certs/ca.crt を配置してみた。

するとca.crt以外にも公開鍵・秘密鍵・DHPARAMも不足している旨のエラーが順に表示されたのでそれらも足した。

でもそもそも内部用でTLSは使っていないから LDAP_TLS : “false”を足した。けれど直らなかった。

よくよく警告文言を見ると定義済み変数は上書きされないと書いてあったから KEEP_EXISTING_CONFIG: “true” を消した。そして docker logs openldap のエラー文言部分が以下に変わった。

61a19a26 slapd starting
61a19a26 daemon: listen(ldap://516808931dce:389, 5) failed errno=98 (Address already in use)
61a19a26 slapd stopped.
*** INFO | 2021-11-27 02:38:30 | /container/run/process/slapd/run exited with status 0
*** INFO | 2021-11-27 02:38:30 | Killing all processes…

このサーバー自体での問題だから、Address already in use はコンテナ内部の問題。

この辺の文言でググっていたところ、HOSTNAMEが怪しいぞという話があった。何か故あってHOSTNAMEのパラメータは消すべきとなった様子だが具体的な理由が知りたいわけではないからよしとする。

docker 起動パラメータから消したら正常表示されるようになった。