質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Elasticsearch

Elasticsearchは、クラウド向けに構築された、RESTful な API を提供する分散型のサーチエンジンアプリケーションです。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

1回答

1569閲覧

Docker for Mac で Elasticsearch を動かした際に too many open files でエラー。Volume内のfile descriptor は増やせない?

macinjoke

総合スコア7

Elasticsearch

Elasticsearchは、クラウド向けに構築された、RESTful な API を提供する分散型のサーチエンジンアプリケーションです。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

1クリップ

投稿2019/04/04 15:20

編集2019/04/04 15:24

Docker for Mac で Elasticsearch を動かそうとして too many open files で2日くらいハマっています。

Elasticsearch はデータ入れるとめちゃくちゃfile descriptor 使って、too many open files
を吐かれて正常に動作しなくなります。

Caused by: java.nio.file.FileSystemException: /usr/share/elasticsearch/data/nodes/0/indices/BXAY4DSNTKqkAJsbiL0icQ/2/index/.es_temp_file: Too many open files in system

それで、 docker run するときに --ulimit="nofile=524288 のようにオプションをつければfile descriptor の上限を変えれるのでやってみました。
下記のようにelasticsearch のステータスを取得し、設定が反映されることを確認できました。

$ curl "localhost:9200/_nodes/stats/process" ... 略 "process": { "timestamp": 1554386415386, "open_file_descriptors": 10260, "max_file_descriptors": 524288, ... 略 }

これでいけるかと思ったのですが、open_file_descriptor が10260 あたりになると必ず too many open files のエラーを吐かれてそれ以上ファイルが開けなくなってしまいます。

ここでめちゃくちゃ試行錯誤した結果この記事にたどり着きました。
https://github.com/docker/for-mac/issues/2354

これによると docker for mac では volume されている場所での file descripor の上限は10217 あたりになってしまうとのことでした。これと全く同じ状況かと思われます。

--volume /path/to/data:/usr/share/elasticsearch/data のようにvolume できないとなると、どうやってデータの永続化をすればよいのかわかりません。詰みました。という状況です。

なにか解決策はあるでしょうか...。

Dockerfile

1# https://github.com/elastic/elasticsearch-docker 2FROM docker.elastic.co/elasticsearch/elasticsearch-oss:6.7.0 3 4WORKDIR /app 5 6ADD . /app 7 8RUN elasticsearch-plugin install analysis-kuromoji

shell

1$ docker build -t es 2$ docker run -it -p 9200:9200 -v /path/to/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro -v /path/to/data:/usr/share/elasticsearch/data -e ES_JAVA_OPTS="-Xmx1g -Xms1g" --ulimit="nofile=524288" es

もろもろのバージョン
もろもろのバージョン

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

データの永続化だけが目的ならホストのディレクトリをマウントする必要はないので、dockerのデータ・ボリュームを使えば良いのではないでしょうか。

https://github.com/docker/for-mac/issues/2354はホストのディレクトリをマウントした場合のみに起きる問題のようなので。

投稿2019/04/05 00:59

crhg

総合スコア1175

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

macinjoke

2019/04/05 03:47 編集

なるほど。 Docker が動いてるVM上の /var/lib/docker/volumes にデータが保存される感じですね。 そうすると、 VM上のボリュームからデータをローカルに落としてきたい場合どうすれば良いのでしょうか。いろいろ調べたのですがわからず。 ``` $ screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty ``` これでVMに入れることはわかったのですが...。
macinjoke

2019/04/06 07:15 編集

なるほど。ありがとうございます。無事にデータのやりとりできました!ありがとうございます。 いい感じにデータ保持できるまでわりと試行錯誤したので補足として書いておきます。 以下のような docker-compose.yml を使用しました。 ``` version: '2' services: elasticsearch: build: context: elasticsearch/ args: ELK_VERSION: $ELK_VERSION volumes: - ./elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro - es_data:/usr/share/elasticsearch/data ports: - "9200:9200" - "9300:9300" environment: ES_JAVA_OPTS: "-Xmx1g -Xms1g" mem_limit: 8g volumes: es_data: ``` docker-compose up, down をしているとボリュームID が変わってしまうことがあったので、named volumes を使ってボリュームにアクセスしやすいようにしました。 コンテナが動いてる状態で、以下のコマンドを打ってローカルからコンテナにデータを送りました。 ``` docker cp data es_elasticsearch_1:/usr/share/elasticsearch ``` そして docker-compose down して docker-compose up してみましたが、 以下のようなエラーが出て正常に動きませんでした。 ``` java.nio.file.AccessDeniedException: /usr/share/elasticsearch/data/nodes/1 ``` パーミッションの問題っぽかったので、 ``` $ screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty ``` でVM に入って ``` chmod 755 -R /var/lib/docker/volumes/es_es_da ta ``` を叩きました。 これでエラーがでずにうまくいきました。 Docker for Mac むずいと思いました... (泣)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問