【Docker】新版本ElasticSearch无法登陆问题

1. Docker中搞定Elasticsearch

1.1. Docker安装Elasticsearch

  1. 下载镜像

    docker pull docker.elastic.co/enterprise-search/enterprise-search:8.7.1
    

    注:es官方提供了自己的镜像仓库

  2. 安装Elasticsearch

    用本地文件跟Docker中的文件映射,方便修改和查看文件。我的本地文件地址换成你自己的地址

    docker run -p 9200:9200 -p 9300:9300 --name elasticsearch_8.7.1 \
    -e "discovery.type=single-node" \
    -e "cluster.name=elasticsearch" \
    -e "ES_JAVA_OPTS=-Xms512m -Xmx1024m" \
    -v /Users/apple/Documents/Work/mydata/elasticsearch_8.7.1/plugins:/usr/share/elasticsearch/plugins \
    -v /Users/apple/Documents/Work/mydata/elasticsearch_8.7.1/data:/usr/share/elasticsearch/data \
    -d elasticsearch:8.7.1
    
  3. 访问http://localhost:9200

    浏览器访问http://localhost:9200失败,那看下怎么处理吧

1.2. 解决访问http://localhost:9200失败

https比http更加安全,现在存在很多应用,用http://ip:port不能访问,但用https://ip:port能访问。

既然浏览器访问http://localhost:9200失败,那查看下端口和日志(elasticsearch启动挺慢的,要在启动后测试)看看是不是端口没有开启或日志报错

telnet localhost 9200

但是发现端口9200是开启的,那为啥不行呢,用 curl http://localhost:9200 试试 大概意思是没有认证,再用 docker logs -f elasticsearch_8.7.1 查看下日志得到如下日志

日志的大概意思就是收到了请求但是是在 https 通道上,猜测是不是要用 https://localhost:9200 访问。

试了一下确实可以访问,但是需要用户名和密码,密码是什么呢,一般密码是在日志文件中打印的,也只能继续去官网查看消息。

现在的elasticsearch对比之前版本加强了安全防护,需要用https且要求用户名和密码

1.2.1. 用密码访问方式

  1. 去官网找默认用户和密码的信息

    比较遗憾的时按照我们上面的启动方式而不是按照官网的启动方式,是没有办法看到打印出来的日志的密码的(官网的启动方式是可以的),那只能根据官网提示的方式去修改密码

    # 在docker容器中执行命令修改用户elastic的密码
    bin/elasticsearch-reset-password -u elastic
    

    用新用户名elastic和密码I7ZU7vuE7Dm=a7weqJ3i登录https://localhost:9200访问成功,会得到如下一串JSON

    {
      "name": "04f5d152fa87",
      "cluster_name": "elasticsearch",
      "cluster_uuid": "z0r22Tg3Q4aYpSDJBMJeaQ",
      "version": {
        "number": "8.7.1",
        "build_flavor": "default",
        "build_type": "docker",
        "build_hash": "f229ed3f893a515d590d0f39b05f68913e2d9b53",
        "build_date": "2023-04-27T04:33:42.127815583Z",
        "build_snapshot": false,
        "lucene_version": "9.5.0",
        "minimum_wire_compatibility_version": "7.17.0",
        "minimum_index_compatibility_version": "7.0.0"
      },
      "tagline": "You Know, for Search"
    }
    

1.2.2. 不用密码访问方式

也有不用密码访问http://localhost:9200的方式,而且在开发测试阶段很推荐使用,方法如下:

  1. 进入到docker的elasticsearch_8.7.1容器中,修改配置文件 config/elasticsearch.yml

    docker exec -it elasticsearch_8.7.1 /bin/bash
    # 编辑文件
    vi config/elasticsearch.yml
    
  2. 把有关加密的配置都修改为false

  3. 但遗憾的是vi命令在docker容器是没有安装的。常规修改docker容器中文件的方法是使用主机和容器间来回拷贝,介绍如下:

    • 拷贝容器文件到主机

      # 拷贝
      docker cp elasticsearch_8.7.1:/usr/share/elasticsearch/config/elasticsearch.yml elasticsearch.yml
      
    • 修改文件(把有关加密的都修改为false)

    • 拷贝主机文件回容器覆盖原有的配置

      docker cp elasticsearch.yml elasticsearch_8.7.1:/usr/share/elasticsearch/config/elasticsearch.yml
      
  4. 重启容器docker restart elasticsearch_8.7.1访问http://localhost:9200发现不要用户名和密码了。哈哈

2. 参考资料

我的文章:《如何查看一个Docker镜像有哪些版本.md》

我的文章:《Docker设置国内镜像源.md》

我的文章:《Docker快速入门实用教程.md》

我的文章:《Docker安装MySQL、Redis、RabbitMQ、Elasticsearch、Nacos等常见服务.md》

我的文章:《Docker安装Nacos服务.md》

我的文章:《如何修改Docker中的文件.md》

我的文章:《Docker容器间的连接或通信方式.md》

我的文章:《Docker安装的MySQL如何持久化数据库数据.md》

我的文章:《制作Docker私有仓库.md》

我的文章:《使用docker-maven-plugin插件构建发布推镜像到私有仓库.md》

我的文章:《解决Docker安装Elasticsearch后访问9200端口失败.md》


传送门:保姆式Spring5源码解析

欢迎与作者一起交流技术和工作生活

联系作者

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fire Fish

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值