docker启动es(解决9200端口访问不到)

正常情况下docker拉取es,9200端口(api)可以访问到,5.0版本后9300端口(client)访问不到,本文针对此情况给出解决方案

一、拉取es

 docker pull docker.elastic.co/elasticsearch/elasticsearch:6.3.2

二、复制docker中配置文件到本地目录

2.1 进入es容器

docker exec -it tensquare_elasticsearch /bin/bash

2.2 复制es配置文件到本地

// ES01为 images 中的name
docker cp ES01:/usr/share/elasticsearch/config/elasticsearch.yml /usr/share/elasticsearch.yml

三、启动 es

// -v读的配置文件地址 -e运行时参数 -p指定端口(外部:内部) --name容器命名
docker run -v /usr/share/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -e "ES_JAVA_OPTS=-Xms256m -Xmx256m" -p 9200:9200 -p 9300:9300 --name ES01 0206b7302cfe

此时启动es后总会自动关闭

三、修改配置文件(重要)

  1. /usr/share/elasticsearch.yml
    其作用是允许任何ip地址访问elasticsearch 。
    开发测试阶段可以这么做,生产环境下指定具体的IP
    在这里插入图片描述
  2. 查看日志
// 发现还是会自己关闭,此时查看日志
docker logs -f  容器id

日志内容
在这里插入图片描述
3. 修改参数

查看max_map_count :
cat /proc/sys/vm/max_map_count
65530
 
设置max_map_count:
sysctl -w vm.max_map_count=262144
vm.max_map_count = 26214
  1. 重启容器:docker start 容器id或名字
    浏览器就能访问了
  2. success
    docker 已可启动
    docker查看
    外部也可ping通
    在这里插入图片描述
### Docker环境下Elasticsearch容器启动失败的原因及解决方案 #### 原因分析 当在Docker环境中尝试启动Elasticsearch时遇到问题,通常可能由以下几个方面引起: - **内存不足**:Elasticsearch对JVM堆大小有严格的要求,默认情况下会分配一半的可用物理RAM作为堆空间,但不超过31GB。如果主机上的可用内存量不足以满足这一需求,则可能导致启动失败[^2]。 - **配置不当**:某些必要的配置项缺失或设置不正确也会阻碍服务正常启动。例如`cluster.initial_master_nodes`参数未被指定,在新版本中这是必需的一项配置。 - **文件权限问题**:对于已挂载的数据卷路径,如果没有给予适当的操作权限(如读写),同样会造成容器内部操作受限而无法成功初始化数据库实例[^4]。 - **端口冲突**:默认监听于9200端口的服务若已被其他进程占用,那么新的Elasticsearch实例就不可能绑定到该地址上完成网络通信建立过程[^3]。 #### 解决方案 针对上述提到的各种情况,可采取如下措施来解决问题并确保能够顺利运行Elasticsearch容器: ##### 调整资源限制 为了防止由于系统层面施加给容器的最大映射内存区域数量过多而导致的问题发生,可以通过调整宿主机的相关内核参数来进行优化处理。具体做法是在启动之前执行命令`sysctl -w vm.max_map_count=262144`以增加允许的最大值范围。 ##### 设置合理的JVM选项 通过向docker run指令附加相应的环境变量(`ES_JAVA_OPTS`)来自定义Java虚拟机的行为特性,比如设定合适的初始与最大堆尺寸(-Xms,-Xmx),从而避免因为过高的内存消耗引发崩溃现象。 ```bash docker run \ --name elasticsearch \ -e ES_JAVA_OPTS="-Xms512m -Xmx512m" \ # 根据实际情况调整此数值 ... ``` ##### 补全必要配置 编辑elasticsearch.yml文件加入以下几行内容以便让集群知晓谁应该成为第一个master节点成员之一,并开放跨域资源共享(CORS)功能方便后续API调用测试工作开展。 ```yaml cluster.name: my-application-cluster-name node.name: node-1 network.host: 0.0.0.0 http.port: 9200 discovery.type: single-node cluster.initial_master_nodes: ["node-1"] http.cors.enabled: true http.cors.allow-origin: "*" ``` 注意替换其中涉及的具体名字部分使之符合个人项目实际状况即可。 ##### 授予数据目录访问权 假设已经指定了外部存储位置用于持久保存索引文档及其他元数据资料的话,请记得授予足够的权限使得应用程序可以在那里自由创建、删除以及修改各类对象实体而不受任何约束条件影响。 ```bash sudo chmod -R 777 /path/to/data/folder/ ``` 以上就是关于如何排查和修复DockerElasticsearch难以激活上线的一些建议方法汇总,希望能够帮助读者朋友们快速定位故障根源所在进而找到有效的应对策略。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值