tl;dr
Elasticsearchが動くコンテナの中に以下の環境変数をねじこめばよい。
参考: Running Elasticsearch 5 - Build Environment - CircleCI Discuss
# これ # transport.host=localhost # # と、これ # bootstrap.system_call_filter=false # # docker run で渡す場合は、 docker run -d \ -e transport.host=localhost \ -e bootstrap.system_call_filter=false \ -p 9200:9200 docker.elastic.co/elasticsearch/elasticsearch:6.6.1 # となる
問題
- CircleCI上でElasticsearchのDockerイメージがうごいてくれない
ERROR: [1] bootstrap checks failed [1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
原因
vm.max_map_count
とは、
- linux kernel - How much memory could vm use - Stack Overflow
- https://www.kernel.org/doc/Documentation/sysctl/vm.txt
- Linux におけるスレッド数の上限
1プロセスあたり所有できるメモリマップの数で、/etc/sysctl.conf
で指定できる。
解決(ホストをいじれる場合)
ので、ホストの/etc/sysctl.conf
をいじって許容を広げればよい。
sudo sysctl -w vm.max_map_count=262144
しかしながら、CircleCIインスタンス上ではこれはpermission denied
となる。さもありなん。
解決(Circle CI)
したがって、なんらかの方法でコンテナ側の要求を下げる必要がある。
docker run -d \ -e transport.host=localhost \ -e bootstrap.system_call_filter=false \ -p 9200:9200 docker.elastic.co/elasticsearch/elasticsearch:6.6.1
あるいは、CircleCI v2 であれば、docker
ディレクティブの中で
docker: - image: docker.elastic.co/elasticsearch/elasticsearch:6.6.1 environment: transport.host: localhost bootstrap.system_call_filter: false
などとすればよい。
DRYな備忘録として