複数の Docker コンテナからそれぞれ異なる index で "その 2" の Elasticsearch へとログを送ったのですけれども、 2 つ目の index を送った時点で Elasticsearch コンテナが Exit してしまいます。
exit code を調べる
最初、 docker inspect
コマンドで調べましたけれども、 docker-compose ps
でも表示されていました。
$ docker inspect es_elasticsearch_1 | grep ExitCode
"ExitCode": 137,
$ docker-compose ps
Name Command State Ports
----------------------------------------------------------------------
es_elasticsearch_1 /usr/local/bin/docker-entr ... Exit 137
$
この内容を手がかりにすると、面白い内容がちらほらみられました。
特に有用だと感じたのは次です。
The application hit an OOM (out of memory) condition.
そうだろうなと思っていたところでした。メモリ不足が原因で異常終了していたのでしょう。
公式ドキュメントを読み直して試す
- Production mode の章
ホスト、つまり Docker をインストールした Mac のメモリを確認しました。
$ screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty
linuxkit-025000000001:~# sysctl vm.max_map_count
vm.max_map_count = 262144
linuxkit-025000000001:~#
この結果を見る限り、設定値は必要最低値でした。これを上げる必要があるのかもしれません。
おわりに、行き詰まったので気分転換
"discovery.type=single-node" だと色々と限界があるのかもしれない、と思い、次のようにしてみました。
docker-compose.yml
# environment:
# discovery.type: "single-node"
environment:
- discovery.seed_hosts=elasticsearch
#- discovery.seed_providers=file
- cluster.initial_master_nodes=elasticsearch
- cluster.name=docker-cluster
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
すると、次のようなエラーです><。
$ curl http://127.0.0.1:9200/_cat/health
{"error":{"root_cause":[{"type":"master_not_discovered_exception","reason":null}],"type":"master_not_discovered_exception","reason":null},"status":503}oki2a24@okitsuatsushinoMacBook-Pro:es$
$
調べて見つけた master_not_discovered_exception · Issue #26488 · elastic/elasticsearch を見てみると、 Elasticsearch の主となるコンテナが見つからないよ!というエラーでした。
Install Elasticsearch with Docker Production mode | Elasticsearch Reference [7.1] | Elastic を参考に書き換えた docker-compose でしたので、何か不足していたのでしょう。
ちょっと混乱してきました><。
ですので、一旦ここで区切って、次は Production mode を素直に動かし、それをカスタマイズしていく方針としたいと思います。
以上です。