Docker Compose healthcheck介紹(監控容器中服務的實際健康狀態)數據庫健康檢查pg_isready

文章目錄

  • **功能概述**
  • **核心參數詳解**
  • **配置示例**
    • **1. 基礎用法**
    • **2. 使用數據庫健康檢查**
    • **3. 結合 `depends_on` 控制啟動順序**
  • **高級用法**
    • **1. 自定義健康檢查腳本**
    • **2. 多種健康檢查類型**
      • - **HTTP 檢查**:
      • - **TCP 端口檢查**:
      • - **Redis 檢查**:
  • **健康狀態生命周期**
    • 1. **初始狀態**:容器啟動后狀態為 `starting`。
    • 2. **健康檢查成功**:狀態變為 `healthy`。
    • 3. **連續失敗次數達到 `retries`**:狀態變為 `unhealthy`。
    • 4. **健康檢查恢復成功**:狀態重新變為 `healthy`。
  • **常見問題與解決方案**
    • 1. **容器狀態為 `Up` 但服務不可用**:
    • 2. **健康檢查腳本依賴外部工具(如 `curl`)**:
    • 3. **健康檢查頻繁失敗導致服務重啟**:
  • **總結**

功能概述

healthcheck 是 Docker 提供的一項功能,用于監控容器中服務的實際健康狀態,而不僅僅是判斷容器進程是否在運行。通過定義健康檢查規則,Docker 會周期性地執行指定命令或腳本,根據返回結果判斷容器是否處于 healthy(健康)或 unhealthy(不健康)狀態。此功能在以下場景中尤為重要:

  • 服務依賴管理:確保依賴的服務(如數據庫、Redis 等)完全就緒后再啟動其他服務。
  • 故障檢測與恢復:及時發現服務異常并觸發重啟或告警。
  • 自動化部署:在容器化應用中實現更可靠的啟動流程。

核心參數詳解

docker-compose.yml 文件中,healthcheck 的配置通常包含以下參數:

參數名說明示例
test健康檢查命令或腳本,返回值為 0 表示健康,非 0 表示不健康。支持 Shell 命令或數組格式。test: ["CMD-SHELL", "curl -sS http://localhost:80 || exit 1"]
interval健康檢查的間隔時間(默認 30s)。interval: 10s
timeout單次檢查的超時時間(默認 30s)。超時后視為檢查失敗。timeout: 5s
retries連續失敗多少次后標記容器為 unhealthy(默認 3)。retries: 5
start_period容器啟動后等待多久才開始首次檢查(默認 0s)。適用于需要較長初始化時間的服務。start_period: 20s

配置示例

1. 基礎用法

version: '3.7'
services:web-app:image: my-web-app:latesthealthcheck:test: ["CMD-SHELL", "curl -sS http://localhost:80 || exit 1"]interval: 10stimeout: 5sretries: 3
  • 說明:每 10 秒檢查一次 Web 服務是否在 localhost:80 上響應成功(HTTP 200)。
  • 條件:如果連續 3 次檢查失敗,容器狀態變為 unhealthy

2. 使用數據庫健康檢查

version: '3.7'
services:postgres-database:image: postgres:latestenvironment:POSTGRES_USER: userPOSTGRES_PASSWORD: passwordhealthcheck:test: ["CMD-SHELL", "pg_isready -U user -d postgres"]interval: 10stimeout: 5sretries: 5
  • 說明:使用 PostgreSQL 自帶的 pg_isready 工具檢查數據庫是否可連接。
  • 依賴服務:其他服務可通過 depends_oncondition: service_healthy 依賴此服務。

3. 結合 depends_on 控制啟動順序

version: '3.7'
services:postgres-database:image: postgres:latesthealthcheck:test: ["CMD-SHELL", "pg_isready -U user -d postgres"]interval: 10stimeout: 5sretries: 5app:image: my-app:latestdepends_on:postgres-database:condition: service_healthy
  • 說明
    • depends_oncondition: service_healthy 確保 app 服務僅在 postgres-database 健康后啟動。
    • 需要 Docker Compose 版本 3.2 或更高。

高級用法

1. 自定義健康檢查腳本

將健康檢查邏輯封裝到腳本中,例如 healthcheck.sh

#!/bin/bash
# healthcheck.sh
curl -sS http://localhost:80 || exit 1

Dockerfile 中復制并配置:

COPY healthcheck.sh /healthcheck.sh
RUN chmod +x /healthcheck.sh
HEALTHCHECK --interval=5s --timeout=3s CMD /healthcheck.sh

2. 多種健康檢查類型

- HTTP 檢查

test: ["CMD-SHELL", "curl -f http://localhost:80/health || exit 1"]

- TCP 端口檢查

test: ["CMD", "nc", "-z", "localhost", "6379"]

- Redis 檢查

test: ["CMD-SHELL", "redis-cli ping | grep -q PONG"]

健康狀態生命周期

1. 初始狀態:容器啟動后狀態為 starting

2. 健康檢查成功:狀態變為 healthy

3. 連續失敗次數達到 retries:狀態變為 unhealthy

4. 健康檢查恢復成功:狀態重新變為 healthy


常見問題與解決方案

1. 容器狀態為 Up 但服務不可用

  • 原因:Docker 默認僅檢查容器進程是否運行,不驗證服務是否可用。
  • 解決方案:添加 healthcheck 配置,從應用層面驗證服務狀態。

2. 健康檢查腳本依賴外部工具(如 curl

  • 解決方法
    • 在 Dockerfile 中安裝依賴工具(如 apt-get install curl)。
    • 使用輕量級替代方案(如 wgetnc)。

3. 健康檢查頻繁失敗導致服務重啟

  • 優化建議
    • 增加 intervalretries 參數值。
    • 調整 start_period 以適應服務初始化時間。

總結

通過 healthcheck 功能,可以顯著提升容器化應用的可靠性和自動化能力。合理配置健康檢查規則,能夠有效解決服務依賴和啟動順序問題,避免因依賴服務未就緒導致的系統故障。結合 depends_oncondition: service_healthy,可以構建更健壯的微服務架構。

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

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

相關文章

算法之雙指針

在算法設計中,雙指針是一種高效優化工具,主要用于線性數據結構(如數組(數組劃分和數組分塊常用)、鏈表、字符串),通過控制兩個指針的移動軌跡,將原本需要 O (n) 時間復雜度的問題優化…

冪等性、順序性保障以及消息積壓

冪等性 概念 在應用程序中,冪等性就是指對一個系統進行重復調用(相同參數),不論請求多少次,這些請求對系統的影響都是相同的效果. 比如數據庫的select操作.不同時間兩次查詢的結果可能不同,但是這個操作…

算法訓練營DAY58 第十一章:圖論part08

拓撲排序精講 卡碼網:117. 軟件構建(opens new window) 題目描述: 某個大型軟件項目的構建系統擁有 N 個文件,文件編號從 0 到 N - 1,在這些文件中,某些文件依賴于其他文件的內容,這意味著如果文件 A 依…

如何在Python中使用正則表達式?

在Python中使用正則表達式主要通過內置的re模塊實現。正則表達式用于匹配、查找、替換字符串中的特定模式,是處理文本的強大工具。以下是使用正則表達式的核心方法和示例: 一、基本用法步驟 導入re模塊:import re定義正則表達式模式&#xff…

用 Trae 玩轉 Bright Data MCP 集成

引言 在自動化與智能體浪潮中,Trae 以“開箱即用、所見即所得”的工具編排體驗,成為個人與團隊落地 AI 工作流的高效選擇。本篇將以 Trae 為主角,展示如何通過最少配置完成與 Bright Data MCP 的對接,并快速構建一個可用、可觀測…

大數據Spark(六十三):RDD-Resilient Distributed Dataset

文章目錄 RDD-Resilient Distributed Dataset 一、RDD五大特性 二、RDD創建方式 RDD-Resilient Distributed Dataset 在 Apache Spark 編程中,RDD(Resilient Distributed Dataset,彈性分布式數據集)是 Spark Core 中最基本的數…

java,通過SqlSessionFactory實現動態表明的插入和查詢(適用于一個版本一個表的場景)

1,測試實體類package org.springblade.sample.test;import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data;/*** Author: 肖揚* CreateTime: 2025-09-05* Description: SqlSessionFactoryTest測試* Version: 1.0*/ Data TableName("session_factory_…

鷓鴣云光儲流程系統全新升級:視頻指引與分階段模塊使用指南

鷓鴣云光儲流程系統近日完成重要更新,全面優化了操作指引體系,為用戶帶來更高效、直觀的使用體驗。本次升級重點推出了全套功能操作視頻,并明確了不同業務階段的核心模塊使用指南,助力用戶快速上手、提升工作效率。全覆蓋視頻操作…

ChatGPT 協作調優:把 SQL 查詢從 5s 優化到 300ms 的全過程

ChatGPT 協作調優:把 SQL 查詢從 5s 優化到 300ms 的全過程 🌟 Hello,我是摘星! 🌈 在彩虹般絢爛的技術棧中,我是那個永不停歇的色彩收集者。 🦋 每一個優化都是我培育的花朵,每一個…

復雜計算任務的智能輪詢優化實戰

目錄 復雜計算任務的智能輪詢優化實戰 一、輪詢方法介紹 二、三種輪詢優化策略 1、用 setTimeout 替代 setInterval 2、輪詢時間指數退避 3、標簽頁可見性檢測(Page Visibility API) 三、封裝一個簡單易用的智能輪詢方法 四、結語 作者&#xff…

Java開發中常用CollectionUtils方式,以及Spring中CollectionUtils常用方法示例

場景 Java開發中常用的CollectionUtils 一、Spring Framework的CollectionUtils 包路徑&#xff1a;org.springframework.util.CollectionUtils 核心方法&#xff1a; isEmpty(Collection<?> coll) List<String> list null; boolean empty CollectionUtil…

人工智能學習:Transformer結構(文本嵌入及其位置編碼器)

一、輸入部分介紹 輸入部分包含: 編碼器源文本嵌入層及其位置編碼器 解碼器目標文本嵌入層及其位置編碼器 在transformer的encoder和decoder的輸入層中,使用了Positional Encoding,使得最終的輸入滿足: 這里,input_embedding是通過常規embedding層,將每一個詞的…

? 肆 ? ? 默認安全建設方案:c-1.增量風險管控

&#x1f44d;點「贊」&#x1f4cc;收「藏」&#x1f440;關「注」&#x1f4ac;評「論」 在金融科技深度融合的背景下&#xff0c;信息安全已從單純的技術攻防擴展至架構、合規、流程與創新的系統工程。作為一名從業十多年的老兵&#xff0c;將系統闡述數字銀行安全體系的建設…

第二課、熟悉Cocos Creator 編輯器界面

本文主要介紹Cocos Creator 編輯器界面中幾個常規的面板功能&#xff0c;讓新手了解編輯器界面中常規的面板功能&#xff0c;更好的使用Cocos Creator 編輯器。一、編輯器界面常規面板劃分Cocos Creater編輯器默認樣式如上&#xff0c;主要包含&#xff1a;1、工具欄&#xff0…

Elixir通過Onvif協議控制IP攝像機,擴展ExOnvif的攝像頭連續移動功能 ContinuousMove

Elixir 通過Onvif 對IP設備進行控制時&#xff0c;可以使用 ExOnvif 庫。ExOnvif官方文檔 此文章僅提供了ContinuousMove的控制方式及示例。 Elixir Onvif協議控制IP設備的其他命令&#xff0c;可以參考以下鏈接 絕對移動 【AbsoluteMove】 調用指定預置位 【GotoPreset】 …

android studio JNI 環境配置實現 java 調用 c/c++

1、在 app 級的 build.gradle 文件配置兩個地方 android{ defaultConfig{ // 在 defaultConfig 里配置下面代碼 externalNativeBuild { cmake { cppFlags "-frtti -fexceptions"//添加對 c 的異常處理支持 …

靜態時序分析詳解之時序路徑類型

目錄 一、概覽 二、時序路徑 2.1 數據路徑 2.2 時鐘路徑 2.3 時鐘門控路徑 2.4 異步路徑 2.5 關鍵路徑 2.6 False路徑 2.7 單周期路徑 2.8 多周期路徑 2.9 最長路徑和最短路徑 三、參考資料 一、概覽 ? ?靜態時序分析通過模擬最差條件下分析所有的時序路徑&am…

SpringBoot埋點功能技術實現方案深度解析:架構設計、性能優化與擴展性實踐

SpringBoot埋點功能技術實現方案深度解析&#xff1a;架構設計、性能優化與擴展性實踐 1. 原理剖析與技術實現細節 1.1 埋點技術基本原理 埋點&#xff08;Tracking&#xff09;是通過在代碼中植入特定邏輯&#xff0c;收集用戶行為數據、系統運行狀態和業務指標的技術手段。在…

自建prometheus監控騰訊云k8s集群

自建prometheus監控騰訊云k8s集群 使用場景 k8s集群&#xff08;騰訊云容器服務&#xff09; promtheus (外部自建服務) 騰訊云提供了容器內部自建 Prometheus 監控 TKE 集群的文檔&#xff0c;參考。 當前的環境promethues建在k8S外的云服務器上&#xff0c;與上面鏈接文…

2025高教社國賽數學建模C題參考論文(含模型和代碼)

2025 年高教社杯大學生數學建模競賽 C 題參考論文 目錄 NIPT 的時點選擇與胎兒的異常判定 摘要 1 問題重述 2 問題分析 2.1 問題 1 分析 2.2 問題 2 分析 2.3 問題 3 分析 2.4 問題 4 分析 3 模型假設與符號定義 3.1 模型假設 4. 孕周在 10-25 周內檢測有…