docker运行ElasticSearch

news/2024/7/7 5:58:47 标签: Docker, ElasticSearch

拉取最新版镜像

下载最新版ElasticSearch

docker pull elasticsearch

默认会使用latestd的tag拉取最新版本,但是报错了

Using default tag: latest
Error response from daemon: manifest for elasticsearch:latest not found: manifest unknown: manifest unknown

大致意思是,找不最新版?what,那我们手动指定版本

docker search没有提供查看所有版本的能力,我们可以去华为云的官方地址上查看最新版本https://mirrors.huaweicloud.com/elasticsearch/

目前最新版是7.8.0,ok我们指定版本为7.8.0

[root@qcy ~]# docker pull elasticsearch:7.8.0
7.8.0: Pulling from library/elasticsearch
524b0c1e57f8: Pull complete 
7a096b8f20be: Pull complete 
9dd8117fbfec: Pull complete 
335891dbdd0e: Pull complete 
dfce820717b4: Pull complete 
82d3459719f7: Pull complete 
2e79822fece3: Pull complete 
2f80b981dd6a: Pull complete 
05f8a08da0ba: Pull complete 

好了,镜像拉取下来了

接着我们运行他


运行

docker run -d -p 9200:9200 -p 9300:9300 --name elastic_search elasticsearch:7.8.0

Elasticsearch 分web(9200)和tcp(9300)两种对外服务接口

docker ps 发现没有启动起来,于是使用docker logs -f 容器id查看日志,发现

Exception in thread "main" java.lang.RuntimeException: starting java failed with [1]
output:
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 1073741824 bytes for committing reserved memory.
# An error report file with more information is saved as:
# logs/hs_err_pid132.log
error:
OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000c0000000, 1073741824, 0) failed; error='Not enough space' (errno=12)
	at org.elasticsearch.tools.launchers.JvmErgonomics.flagsFinal(JvmErgonomics.java:126)
	at org.elasticsearch.tools.launchers.JvmErgonomics.finalJvmOptions(JvmErgonomics.java:88)
	at org.elasticsearch.tools.launchers.JvmErgonomics.choose(JvmErgonomics.java:59)
	at org.elasticsearch.tools.launchers.JvmOptionsParser.jvmOptions(JvmOptionsParser.java:137)
	at org.elasticsearch.tools.launchers.JvmOptionsParser.main(JvmOptionsParser.java:95)

看得出来,该版本至少要求JVM拥有1G的内存。可在阿里云上,内存十分的珍贵,这个时候我们可以修改jvm运行的最小内存。


修改JVM内存

首先找到jvm.options文件

[root@qcy ~]# find / -name jvm.options
/var/lib/docker/overlay2/a0dd29c922a8c18e3aac1f569b53641e72dc6f16d76be8e84b04a4e2899f5d2a/diff/usr/share/elasticsearch/config/jvm.options

可以看到,默认要求是1g,云主机上可没那么多的内存,所以就给他128MB吧,呜呜呜

[root@qcy ~]# vi /var/lib/docker/overlay2/a0dd29c922a8c18e3aac1f569b53641e72dc6f16d76be8e84b04a4e2899f5d2a/diff/usr/share/elasticsearch/config/jvm.options

 

# Xms represents the initial size of total heap space
# Xmx represents the maximum size of total heap space

-Xms128m
-Xmx128m

保存,使用docker start 容器id 启动容器试试

当然,也可以在启动时,使用-e指定jvm内存

docker run -d -p 9200:9200 -p 9300:9300 -e ES_JAVA_POTS="-Xms128m -Xmx128m" --name elastic_search elasticsearch:7.8.0

纳尼?启动还是报错

ERROR: [2] bootstrap checks failed
[1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
[2]: the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured
ERROR: Elasticsearch did not exit normally - check the logs at /usr/share/elasticsearch/logs/docker-cluster.log
{"type": "server", "timestamp": "2020-09-11T08:23:09,586Z", "level": "INFO", "component": "o.e.n.Node", "cluster.name": "docker-cluster", "node.name": "793a3c13cb16", "message": "stopping ..." }
{"type": "server", "timestamp": "2020-09-11T08:23:09,606Z", "level": "INFO", "component": "o.e.n.Node", "cluster.name": "docker-cluster", "node.name": "793a3c13cb16", "message": "stopped" }
{"type": "server", "timestamp": "2020-09-11T08:23:09,606Z", "level": "INFO", "component": "o.e.n.Node", "cluster.name": "docker-cluster", "node.name": "793a3c13cb16", "message": "closing ..." }
{"type": "server", "timestamp": "2020-09-11T08:23:09,627Z", "level": "INFO", "component": "o.e.n.Node", "cluster.name": "docker-cluster", "node.name": "793a3c13cb16", "message": "closed" }
{"type": "server", "timestamp": "2020-09-11T08:23:09,629Z", "level": "INFO", "component": "o.e.x.m.p.NativeController", "cluster.name": "docker-cluster", "node.name": "793a3c13cb16", "message": "Native controller process has stopped - no new native processes can be started" }

提升进程的虚拟内存空间

修改sysctl.conf配置

vi /etc/sysctl.conf 

在最后一行添加

vm.max_map_count=262144

接着

[root@qcy ~]# sysctl -p

sysctl -p 的意思是从指定的文件加载系统参数,如不指定即从/etc/sysctl.conf中加载

这次再启动,应该没什么问题了吧?

然鹅,事实是报了一个新的错误

ERROR: [1] bootstrap checks failed
[1]: the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured
ERROR: Elasticsearch did not exit normally - check the logs at /usr/share/elasticsearch/logs/docker-cluster.log

配置为单机

由于我们暂时是单机部署的,需要指定为单节点模式,修改启动命令,加上-e "discovery.type=single-node"

docker run -d -p 9200:9200 -p 9300:9300 -e ES_JAVA_POTS="-Xms128m -Xmx128m" -e "discovery.type=single-node" --name elastic_search elasticsearch:7.8.0

再次启动,终于不报错了,舒服了。


检查服务运行情况

如果是云主机上,记得在防火墙中开放9200端口。这个时候访问ip:9200,可以得到以下信息:

{
  "name" : "6a3a276b4e66",
  "cluster_name" : "docker-cluster",
  "cluster_uuid" : "62g1XzSxSGWGH3VU4sbQog",
  "version" : {
    "number" : "7.8.0",
    "build_flavor" : "default",
    "build_type" : "docker",
    "build_hash" : "757314695644ea9a1dc2fecd26d1a43856725e65",
    "build_date" : "2020-06-14T19:35:50.234439Z",
    "build_snapshot" : false,
    "lucene_version" : "8.5.1",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

说明服务运行正常

 


http://www.niftyadmin.cn/n/1704744.html

相关文章

DWZ LookUp Suggest 教程

单个查找带回 jsp 代码 lookup.jsp <% page language"java" contentType"text/html; charsetUTF-8" pageEncoding"UTF-8"%> <h2 class"contentTitle">suggestlookup</h2> <form action"demo/common/aja…

代码审计--8--第三方组件

一、框架相关漏洞 iBatis(MyBatis)框架 ibatis使用不当导致sql注入。如下: 代码示例:mapper文件 select * from messages where username=#{username} //这种写法不会产生SQL注入select * from user where username like %$username$% //这种like写法会产生SQL注入 //在ib…

代码审计--9--环境搭建+工具使用

=========================== 代码审计工具汇总: https://download.csdn.net/download/wutianxu123/10703087 =========================== 一、环境搭建 1.1、理论基础 针对于JavaWeb的代码审计工作环境的部署,其实如果是以服务的方式为客户的代码进行审计,审计的环境一…

面试官:如何停止一个正在运行的线程?我又懵了

上一篇讲了如何等待子线程运行结束&#xff0c;原文https://blog.csdn.net/qq_33591903/article/details/108496110。 本篇讲讲如何终止子线程 暴力停止——Stop方法 package com.qcy.testStopThread;/*** author qcy* create 2020/09/16 09:40:34*/ public class Main1 {sta…

SVG 旋转图形实例

本实例展示如何在SVG中画出一个正方形并使之旋转。运行结果如下图所示&#xff1a; 在文本框中输入时间间隔&#xff0c;单位是毫秒。点击Start按钮&#xff0c;蓝色方块就会开始转动&#xff0c;每个时间间隔变化一度。变换的角度在下面的Angle处显示。 实现代码如下&#xff…

代码审计--10--Java web基础(上)

一、Java语言基础 Request & Response(请求与响应) 请求和响应在Web开发当中没有语言之分不管是ASP、PHP、ASPX还是JAVAEE也好,Web服务的核心应该是一样的。在我看来Web开发最为核心也是最为基础的东西就是Request和Response!我们的Web应用最终都是面向用户的,而请求和…

【leetcode.83】删除排序链表中的重复元素

一、题目描述 给定一个排序链表&#xff0c;删除所有重复的元素&#xff0c;使得每个元素只出现一次。 示例 1: 输入: 1->1->2 输出: 1->2 示例 2: 输入: 1->1->2->3->3 输出: 1->2->3 二、思路 只要当前节点(currentNode)的值与下一个节点(c…

代码审计--12--源代码审计思路(上)

一、引子 一个Java应用的代码审计工作应该从哪里入手,对于新手来说也许会不知所措,如果在不了解整个应用系统情况下(包括业务功能、框架使用等)盲目的直接去阅读项目中源代码,往往会迷失在代码中导致漏洞误报漏报情况,审计效率同样不高。所以在审计之前要了解应用系统主…