使用elasticsearch 5.0启动新容器时失败

我运行:

$ docker run --rm -ti -p 9200:9200 -p 9300:9300 elasticsearch 

但是我无法启动elasticsearch 5.0,这里是日志:

 Unable to find image 'elasticsearch:latest' locally latest: Pulling from library/elasticsearch 43c265008fae: Already exists af36d2c7a148: Already exists 2b7b4d10e1c1: Already exists 9f7579daddb2: Already exists a985511f2468: Already exists 6c2b485fcc3e: Already exists 00b73c83b440: Already exists a38975861823: Pull complete b9d0b4aaf934: Pull complete f5f25bb3de04: Pull complete 93426e1e8953: Pull complete 590c2ab9b639: Pull complete 31bf48850601: Pull complete 21aad7ce70fa: Pull complete Digest: sha256:29205bca045c8d083f777dfc453f4f1ff3d2c08ea4f529f88795166c58e5607e Status: Downloaded newer image for elasticsearch:latest [2016-10-31T20:56:22,023][INFO ][oenNode ] [] initializing ... [2016-10-31T20:56:22,129][INFO ][oeeNodeEnvironment ] [N-vpIo0] using [1] data paths, mounts [[/usr/share/elasticsearch/data (/dev/sda8)]], net usable_space [48.7gb], net total_space [98.3gb], spins? [possibly], types [ext4] [2016-10-31T20:56:22,130][INFO ][oeeNodeEnvironment ] [N-vpIo0] heap size [1.9gb], compressed ordinary object pointers [true] [2016-10-31T20:56:22,130][INFO ][oenNode ] [N-vpIo0] node name [N-vpIo0] derived from node ID; set [node.name] to override [2016-10-31T20:56:22,132][INFO ][oenNode ] [N-vpIo0] version[5.0.0], pid[1], build[253032b/2016-10-26T05:11:34.737Z], OS[Linux/3.16.0-4-amd64/amd64], JVM[Oracle Corporation/OpenJDK 64-Bit Server VM/1.8.0_102/25.102-b14] [2016-10-31T20:56:22,785][INFO ][oepPluginsService ] [N-vpIo0] loaded module [aggs-matrix-stats] [2016-10-31T20:56:22,785][INFO ][oepPluginsService ] [N-vpIo0] loaded module [ingest-common] [2016-10-31T20:56:22,785][INFO ][oepPluginsService ] [N-vpIo0] loaded module [lang-expression] [2016-10-31T20:56:22,785][INFO ][oepPluginsService ] [N-vpIo0] loaded module [lang-groovy] [2016-10-31T20:56:22,785][INFO ][oepPluginsService ] [N-vpIo0] loaded module [lang-mustache] [2016-10-31T20:56:22,785][INFO ][oepPluginsService ] [N-vpIo0] loaded module [lang-painless] [2016-10-31T20:56:22,785][INFO ][oepPluginsService ] [N-vpIo0] loaded module [percolator] [2016-10-31T20:56:22,785][INFO ][oepPluginsService ] [N-vpIo0] loaded module [reindex] [2016-10-31T20:56:22,785][INFO ][oepPluginsService ] [N-vpIo0] loaded module [transport-netty3] [2016-10-31T20:56:22,785][INFO ][oepPluginsService ] [N-vpIo0] loaded module [transport-netty4] [2016-10-31T20:56:22,786][INFO ][oepPluginsService ] [N-vpIo0] no plugins loaded [2016-10-31T20:56:22,875][WARN ][oedsgGroovyScriptEngineService] [groovy] scripts are deprecated, use [painless] scripts instead [2016-10-31T20:56:24,241][INFO ][oenNode ] [N-vpIo0] initialized [2016-10-31T20:56:24,241][INFO ][oenNode ] [N-vpIo0] starting ... [2016-10-31T20:56:24,380][INFO ][oetTransportService ] [N-vpIo0] publish_address {172.17.0.4:9300}, bound_addresses {[::]:9300} [2016-10-31T20:56:24,389][INFO ][oebBootstrapCheck ] [N-vpIo0] bound or publishing to a non-loopback or non-link-local address, enforcing bootstrap checks ERROR: bootstrap checks failed max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144] [2016-10-31T20:56:24,400][INFO ][oenNode ] [N-vpIo0] stopping ... [2016-10-31T20:56:24,426][INFO ][oenNode ] [N-vpIo0] stopped [2016-10-31T20:56:24,426][INFO ][oenNode ] [N-vpIo0] closing ... [2016-10-31T20:56:24,433][INFO ][oenNode ] [N-vpIo0] closed 

请问我该如何解决这个问题?

正如在Host Setup部分的Docker镜像文档中所说:

注意:从5.0开始,Elasticsearch默认只侦听本地主机,所以这个镜像将network.host设置为0.0.0.0(因为在Docker上下文中localhost并不是非常有用)。

因此,Elasticsearch对其执行的引导检查更为严格,特别是在检查vm.max_map_count的值时,该值不是命名空间的,因此必须设置为主机上可接受的值(而不是简单地使用–sysctl在docker上运行)。

所以你只需要在主机上执行它:

 sysctl -w vm.max_map_count=262144 

你很高兴与5.0.0版本

要永久设置此值,请更新/etc/sysctl.confvm.max_map_count设置。 要在重新启动后进行validation,请运行sysctl vm.max_map_count

更多信息在这里

这是与虚拟内存设置有关的问题,下面的命令应该工作:

 sysctl -w vm.max_map_count=262144 

更多细节可以在这里findhttps://www.elastic.co/guide/en/elasticsearch/reference/5.0/vm-max-map-count.html