要約
Elasticsearch5の公式イメージからDockerコンテナを立ち上げようとすると、メモリが少ないと立ち上がらない。
以下のように、ES_JAVA_OPTSでJava VMのヒープサイズを指定してあげると良い。
# (例)メモリ1250M・Javaのヒープサイズ400Mの場合
docker run -m 1250m -e "ES_JAVA_OPTS=-Xms400m -Xmx400m" elasticsearch:5.3.2
詳細
メモリ1250MでElasticsearch5のイメージを立ち上げようとすると、
エラーメッセージを吐かずに落ちる。
docker run -m 1250m elasticsearch:5.3.2
docker inspect
で調べると、ステータスコード137で落ちている模様、、
ファイルディスクリプタ数の上限を指定する
elasticsearchは大量のファイルディスクリプタを消費するので、まずはファイルディスクリプタ数の上限を指定してみる。
デフォルトでは64Kだそうなので、半分の32K・さらに半分の16Kで試してみるがうまくいかない。
docker run -m 1250m --ulimit nofile=32000:32000
docker run -m 1250m --ulimit nofile=16000:16000
コンテナのメモリ上限を上げてみる
ではメモリの問題かと考え、コンテナのメモリ上限を上げて試してみると、立ち上げに成功。今回はメモリに制限があることが前提の環境だったので、工夫してみる。
docker run -m 3000m elasticsearch:5.3.2
ES_HEAP_SIZEを指定
ぐぐると、ES_HEAP_SIZEという環境変数でJava VMのヒープサイズ上限を指定できる模様。早速やってみる。
https://www.elastic.co/guide/en/elasticsearch/reference/current/heap-size.html を見ると、メモリの半分以下が推奨されているので、とりあえず400Mにしておく。
docker run -m 1250m -e "ES_HEAP_SIZE=400m" elasticsearch:5.3.2
するとこんなエラーが。環境変数の名前が変わったよ、というエラーのようだ。
Error: encountered environment variables that are no longer supported
Use jvm.options or ES_JAVA_OPTS to configure the JVM
ES_HEAP_SIZE=400m: set -Xms400m and -Xmx400m in jvm.options or add "-Xms400m -Xmx400m" to ES_JAVA_OPTS
ES_JAVA_OPTSを指定
エラーメッセージのままに、環境変数の指定を変えて再チャレンジ。
docker run -m 1250m -e "ES_JAVA_OPTS=-Xms400m -Xmx400m" elasticsearch:5.3.2
立ち上がった!
最後に
けっこう苦労したのだが、ちゃんと公式のリファレンスに書いてありました、、Elasticの製品は、リファレンスがきっちりしていて良いですね。
https://www.elastic.co/guide/en/elasticsearch/reference/current/heap-size.html