【ElasticSearch】使用docker compose,通過編寫yml安裝es8.15和kibana可視化界面操作,go連接es

使用 Docker 安裝 Elasticsearch

Docker 搭建 Elasticsearch + Kibana 環境,并在過程中標注常見問題和解決方案。


1. 準備工作

在開始之前,請確認你本地已經安裝了:

工具版本建議檢查方式
Docker≥ 20.xdocker -v
Docker Compose≥ 2.xdocker compose version

常見問題:

  • 版本過低:老版本 Docker 對內存管理、網絡有兼容性問題,建議升級到最新。
  • Windows 用戶:建議使用 WSL2 + Docker Desktop,不要用 Hyper-V。

2. 選擇 Elasticsearch 版本

建議選擇 8.x 穩定版本(例如 8.15.0),因為:

  • 7.x 之后安全功能(TLS、認證)逐漸成為默認配置
  • 新手學習時如果用最新版本,文檔和功能對齊度更高

建議鏡像:docker.elastic.co/elasticsearch/elasticsearch:8.15.0
官方鏡像在 Elastic 倉庫,不在 DockerHub。


3. 創建 Docker Compose 配置

新建一個目錄,例如 es-docker,然后創建 docker-compose.yml

version: "3.8"
services:elasticsearch:image: docker.elastic.co/elasticsearch/elasticsearch:8.15.0container_name: es01environment:- node.name=es01- cluster.name=es-docker-cluster- discovery.type=single-node- bootstrap.memory_lock=true- ES_JAVA_OPTS=-Xms1g -Xmx1g- xpack.security.enabled=false   # 學習環境可以先關閉安全認證ulimits:memlock:soft: -1hard: -1volumes:- es_data:/usr/share/elasticsearch/data# 將容器內分詞器配置同步到宿主機,方便修改保存- ./ik-config:/usr/share/elasticsearch/config/analysis-ikports:- 9200:9200- 9300:9300kibana:image: docker.elastic.co/kibana/kibana:8.15.0container_name: kib01environment:- ELASTICSEARCH_HOSTS=http://es01:9200ports:- 5601:5601depends_on:- elasticsearchvolumes:es_data:driver: local

4. 配置詳解

配置項作用注意事項
discovery.type=single-node單節點模式必須加,否則容器會一直等待集群發現
bootstrap.memory_lock=true鎖定內存避免 swap 導致性能下降
ES_JAVA_OPTS=-Xms1g -Xmx1gJVM 內存初學者建議 1g,不要設置超過 Docker 可用內存
xpack.security.enabled=false關閉安全認證學習時可關掉,否則要處理證書和密碼

常見問題:

  1. 內存不足容器無法啟動

    • 解決:在 Docker Desktop 設置里調大內存(至少 2GB 給 ES)
  2. 安全認證卡住(出現 bootstrap check failure

    • 解決:確認已加 xpack.security.enabled=false
  3. Kibana 無法連上 ES

    • 解決:確認 ELASTICSEARCH_HOSTS=http://es01:9200 配置正確

5. 啟動服務

es-docker 目錄執行:

docker compose up -d

檢查容器狀態:

docker ps

看到類似輸出說明啟動成功:

CONTAINER ID   IMAGE                                                  COMMAND                  STATUS          PORTS
abc123         docker.elastic.co/elasticsearch/elasticsearch:8.15.0   "/bin/tini -- /usr/l…"   Up 2 minutes    0.0.0.0:9200->9200/tcp
def456         docker.elastic.co/kibana/kibana:8.15.0                 "/bin/tini -- /usr/l…"   Up 2 minutes    0.0.0.0:5601->5601/tcp

6. 驗證 Elasticsearch

在瀏覽器訪問:

  • Elasticsearch: http://localhost:9200
    你應該看到類似:

    {"name" : "es01","cluster_name" : "es-docker-cluster","cluster_uuid" : "xxxx","version" : {"number" : "8.15.0"},"tagline" : "You Know, for Search"
    }
    
  • Kibana: http://localhost:5601

如果 Kibana 頁面空白或報錯:等 1-2 分鐘,它需要時間初始化。


7. 學習建議

安裝好之后,你可以:

  1. 基礎操作

    curl -X GET "localhost:9200/_cat/indices?v"
    curl -X PUT "localhost:9200/test_index"
    curl -X POST "localhost:9200/test_index/_doc/1" -H 'Content-Type: application/json' -d '{"name":"Alice"}'
    curl -X GET "localhost:9200/test_index/_search?q=name:Alice"
    
  2. 使用 Kibana Dev Tools

    • 打開 http://localhost:5601/app/dev_tools#/console
    • 在左側輸入 DSL 查詢,右側返回結果,體驗比 curl 友好。

8. 常見問題匯總(FAQ)

問題原因解決辦法
容器一直重啟內存不足調大 Docker 內存
max virtual memory areas vm.max_map_count [65530] is too lowLinux 內核參數限制sudo sysctl -w vm.max_map_count=262144
Kibana 502 錯誤ES 未啟動好先等 1-2 分鐘,確認 ES 9200 可訪問
Windows 下訪問不了WSL2 網絡配置訪問 localhost 而不是虛擬機 IP

Go 語言連接 Docker 中的 Elasticsearch

1. 安裝依賴

Elastic 官方提供 Go 客戶端:
github.com/elastic/go-elasticsearch/v8

執行:

go get github.com/elastic/go-elasticsearch/v8

2. 編寫示例代碼

新建一個文件 main.go

package mainimport ("bytes""context""encoding/json""fmt""log""strings"elasticsearch "github.com/elastic/go-elasticsearch/v8"
)// 定義一個簡單的文檔結構
type User struct {Name string `json:"name"`Age  int    `json:"age"`
}func main() {// 1. 配置 ES 客戶端cfg := elasticsearch.Config{Addresses: []string{"http://192.168.132.131:9200", // 連接 Docker 里的 ES},// 如果你開啟了 xpack.security.enabled=true,需要在這里配置用戶名密碼// Username: "elastic",// Password: "your_password",}es, err := elasticsearch.NewClient(cfg)if err != nil {log.Fatalf("創建客戶端失敗: %s", err)}// 2. Ping 一下,確認連接成功res, err := es.Info()if err != nil {log.Fatalf("連接 ES 失敗: %s", err)}defer res.Body.Close()fmt.Println("已連接到 Elasticsearch:", res)// 3. 插入一條文檔user := User{Name: "Alice", Age: 25}doc, _ := json.Marshal(user)res, err = es.Index("users",                           // 索引名(如果不存在會自動創建)bytes.NewReader(doc),              // 文檔內容es.Index.WithDocumentID("1"),      // 指定 ID = 1es.Index.WithContext(context.Background()),)if err != nil {log.Fatalf("寫入文檔失敗: %s", err)}defer res.Body.Close()fmt.Println("文檔寫入成功")// 4. 搜索文檔query := `{"query": {"match": {"name": "Alice"}}}`res, err = es.Search(es.Search.WithContext(context.Background()),es.Search.WithIndex("users"),              // 查詢的索引es.Search.WithBody(strings.NewReader(query)),es.Search.WithPretty(),)if err != nil {log.Fatalf("搜索失敗: %s", err)}defer res.Body.Close()var result map[string]interface{}if err := json.NewDecoder(res.Body).Decode(&result); err != nil {log.Fatalf("解析響應失敗: %s", err)}// 打印搜索結果fmt.Println("搜索結果:")hits := result["hits"].(map[string]interface{})["hits"].([]interface{})for _, hit := range hits {doc := hit.(map[string]interface{})source := doc["_source"].(map[string]interface{})fmt.Printf("ID=%s, Name=%s, Age=%.0f\n", doc["_id"], source["name"], source["age"])}
}

3. 運行測試

確保 Docker 里的 Elasticsearch 已經啟動 (9200 端口可訪問)。
然后運行:

go run main.go

你應該能看到類似輸出:

已連接到 Elasticsearch: ...
文檔寫入成功
搜索結果:
ID=1, Name=Alice, Age=25

4. 常見問題(Go 端)

問題原因解決方法
connection refusedDocker 里的 ES 沒啟動 / 端口沒映射檢查 docker ps,確認 9200 端口暴露出來
security_exception你沒關閉安全認證在 docker-compose 里加 xpack.security.enabled=false 或配置用戶名密碼
index_not_found_exception查詢的索引不存在先寫入文檔,ES 會自動創建索引

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/94696.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/94696.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/94696.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

《C 語言文件操作補充:字符串格式化與隨機讀寫全解析》

目錄 一. sprintf函數和sscanf函數 1.1 sprintf 函數:將格式化數據寫入字符串 1.2 sscanf 函數:從字符串中格式化讀取數據 二. 文件的隨機讀寫 2.1 fseek 函數:移動文件讀寫指針 2.2 ftell 函數:獲取當前指針位置 2.3 rew…

SOME/IP-SD報文中 Entry Format(條目格式)-理解筆記4

逐字段解析 AUTOSAR SOME/IP Service Discovery 中的 Entry 格式。我們將它拆解成幾個部分,并用清晰的排版和比喻來確保每個字段都得到解釋。📜 Entry 的完整結構:三層蛋糕 一條完整的 SD Entry 信息就像一塊三層蛋糕,從上到下分別…

在 vue3 和 vue2 中,computed 計算屬性和 methods 方法區別是什么

在 Vue 2 和 Vue 3 中,computed(計算屬性)和 methods(方法)都是處理數據邏輯的方式,但它們在緩存機制、使用場景、執行時機等方面有顯著區別,且這些區別在兩個版本中保持一致。 1. 緩存機制&…

android 改機系列之-虛擬攝像頭-替換相機預覽畫面

Android Native 層實現跨進程 YUV 視頻幀共享:基于抽象 Unix Socket 的高效通信方案。基于AOSP13源碼或者lineage20 或相近版本。非hook 或者lsp 等插件方案。 1.引言 在某些定制化 Android 應用場景中,我們可能需要動態替換系統相機的預覽畫面 —— 例…

SSM從入門到實戰:2.5 SQL映射文件與動態SQL

👋 大家好,我是 阿問學長!專注于分享優質開源項目解析、畢業設計項目指導支持、幼小初高的教輔資料推薦等,歡迎關注交流!🚀 12-SQL映射文件與動態SQL 📖 本文概述 本文是SSM框架系列MyBatis進…

vue+vite打包后的文件希望放在一個子目錄下

比如我們常規操作是打包的項目文件直接放在域名下面。如果我們希望把項目放在子域名下面應該怎么處理呢?需要兩個步驟vite.config.js里面指定base的路徑假設我們希望放在子目錄加做call那么我們可以這樣base:/call/,注意不是build目錄哈。return的最外層。如果本地和…

Java:Docx4j類庫簡介及使用

1.簡介 Docx4j 是一個功能強大的 Java 類庫,專門用于創建和操作 Microsoft Open XML 格式(如 Word DOCX、PowerPoint PPTX 和 Excel XLSX)的文件。它深受 Java 開發者喜愛,特別是在需要自動化處理 Office 文檔的場景下。 下面是一…

【機械故障】旋轉機械故障引起的振動信號調制效應概述

系列文章目錄 提示:學習筆記 機械故障信號分析 共振峰 旋轉機械故障引起的振動信號調制效應概述系列文章目錄一、研究背景與意義二、故障引起的調制效應分類三、非平穩信號分析方法3.1 時頻分析方法3.2 信號分解方法一、研究背景與意義 在工程實踐中,可…

密碼安全隱形基石:隨機數、熵源與DRBG核心解析與技術關聯

前言:密碼安全的 “隱形基石” 在數字化浪潮席卷全球的今天,從金融交易的密鑰生成到區塊鏈的共識機制,從量子通信的加密協議到智能汽車的身份認證,隨機數如同空氣般滲透在信息系統的每一個安全節點。然而,看似簡單的 …

Vue3 + Element Plus實現表格多行文本截斷與智能Tooltip提示

在實際開發中,我們經常需要在表格中展示較長的文本內容,但又希望保持界面的整潔美觀。本文將介紹如何在Vue3 和 Element Plus中實現表格多行文本截斷,并智能控制Tooltip的顯示——只有當文本被截斷時才顯示Tooltip,否則不顯示。 需…

使用powerquery處理數據,取時間或者日期之前的

Table.AddColumn(#"已更改列類型 1", "自定義 (2)", each letcleanText Text.Replace([備注], "#(lf)", " "),hasTime Text.Contains(cleanText, "時間:"),hasDate Text.Contains(cleanText, "日期&…

Java面試全棧技術解析:從Spring Cloud到Kafka的實戰演練

面試官:請簡單介紹一下Spring Cloud的核心組件? 謝飛機:嗯...Spring Cloud主要是基于Spring Boot的,然后有Eureka做服務發現,Feign做聲明式REST調用,還有Config做配置中心... 面試官:那在電商場…

極簡 useState:手寫 20 行,支持多次 setState 合并

不依賴 React,用 閉包 批處理隊列 實現可合并更新的 useState。一、20 行完整代碼 function createUseState(initialValue) {let state initialValue;let pending null; // 合并隊列let listeners [];const flush () > {if (pending ! null) {…

LabVIEW Vision視覺引導撐簧圈智能插裝

為解決人工插裝連接器撐簧圈時勞動強度大、效率低、一致性差的問題,例以 LabVIEW為開發平臺,結合 IMAQ Vision 機器視覺庫,搭配精密硬件搭建智能插裝系統。系統可適配 9 芯、13 芯、25 芯、66 芯、128 芯 5 種規格工件,經 100 只產…

【Lua】題目小練11

-- 題目1:-- 給定表 t {"apple", "banana", "apple", "orange", "banana", "apple"}-- 寫一個函數 countFreq(tbl) 返回一個新表,統計每個元素出現次數-- 例如:返回 {apple3, …

ElementUI之菜單(Menu)使用

文章目錄項目創建創建項目運行項目整理目錄刪除src/assets中的所有logo.png刪除src/components中的所有文件修改src/route/index.js刪除src/views中所有文件修改src/app.vue整理完目錄如下引入ElementUI安裝ElementUI引入ElementUI測試是否安裝成功編寫src/app.vue運行結果編寫…

Python訓練營打卡Day44-通道注意力(SE注意力)

知識點回顧: 不同CNN層的特征圖:不同通道的特征圖什么是注意力:注意力家族,類似于動物園,都是不同的模塊,好不好試了才知道。通道注意力:模型的定義和插入的位置通道注意力后的特征圖和熱力圖 內…

shiro進行解密

目錄Shiro 解密的核心注意事項1. 密碼處理:堅決避免 “可逆解密”2.例子【自己模擬數據庫,未連數據庫】:Shiro 解密的核心注意事項 1. 密碼處理:堅決避免 “可逆解密” 禁用明文存儲:永遠不要將明文密碼存入數據庫,必須使用 Has…

更改 Microsoft Edge 瀏覽器的緩存與用戶數據目錄位置

Microsoft Edge瀏覽器默認會將緩存文件和用戶數據存儲在系統盤(通常是C盤),隨著使用時間的增長,這些文件可能會占用大量空間。本文將詳細介紹多種更改Edge瀏覽器緩存位置和用戶數據目錄位置的方法,幫助您更好地管理磁盤…

【傳奇開心果系列】Flet框架實現的圖形化界面的PDF轉word轉換器辦公小工具自定義模板

let框架實現的圖形化界面的PDF轉word轉換器辦公小工具自定義模板一、效果展示截圖二、PDF轉Word轉換器概括介紹三、功能特性四、安裝依賴五、運行程序六、使用說明七、注意事項八、技術棧九、系統要求十、源碼下載地址 一、效果展示截圖二、PDF轉Word轉換器概括介紹 一個基于Fl…