最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Docker中配置容器啟動優(yōu)先級與依賴關(guān)系

 更新時間:2026年04月27日 09:13:59   作者:冰川箭仙  
Docker 中配置容器啟動優(yōu)先級與依賴關(guān)系主要通過 depends_on 和 healthcheck 實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

Docker 中配置容器啟動優(yōu)先級與依賴關(guān)系主要通過 depends_onhealthcheck 實現(xiàn)。

1. 基礎(chǔ)依賴:depends_on

僅控制啟動順序,不等待服務(wù)就緒。

version: "3.9"
services:
  web:
    build: .
    depends_on:
      - db        # web 在 db 之后啟動
      - redis     # 支持多個依賴
  db:
    image: postgres:15
  redis:
    image: redis:7

?? 關(guān)鍵限制depends_on 只保證容器啟動順序,不等待服務(wù)真正可用(如數(shù)據(jù)庫完成初始化)。如果 web 啟動時 db 還在初始化,連接會失敗。

2. 等待服務(wù)就緒:條件依賴(Compose v2.20+ / v3.4+)

通過 condition 實現(xiàn)真正的啟動順序控制。

方案 A:健康檢查依賴(推薦)

services:
  web:
    build: .
    depends_on:
      db:
        condition: service_healthy   # 等待 db 健康
      redis:
        condition: service_healthy
  db:
    image: postgres:15
    environment:
      POSTGRES_PASSWORD: secret
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      interval: 5s        # 檢查間隔
      timeout: 3s         # 超時時間
      retries: 5          # 重試次數(shù)
      start_period: 10s   # 啟動寬限期
  redis:
    image: redis:7
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 5s
      timeout: 3s
      retries: 5

方案 B:等待容器退出(用于初始化任務(wù))

services:
  web:
    build: .
    depends_on:
      migration:
        condition: service_completed_successfully  # 等待 migration 正常退出
  migration:
    image: myapp
    command: ["python", "manage.py", "migrate"]

3. 健康檢查詳解

常用服務(wù)的健康檢查配置

服務(wù)健康檢查命令
PostgreSQLpg_isready -U <user> 或 pg_isready -d <dbname>
MySQLmysqladmin ping -h localhost
Redisredis-cli ping(返回 PONG)
MongoDBmongosh --eval 'db.adminCommand("ping")'
Elasticsearchcurl -f http://localhost:9200/_cluster/health
自定義 HTTPcurl -f http://localhost:8080/health

健康檢查參數(shù)

healthcheck:
  test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
  interval: 30s      # 檢查間隔(默認(rèn) 30s)
  timeout: 10s       # 單次檢查超時(默認(rèn) 30s)
  retries: 3         # 失敗重試次數(shù)(默認(rèn) 3)
  start_period: 40s  # 容器啟動后多久開始檢查(默認(rèn) 0s)
  disable: false     # 禁用健康檢查

4. 啟動優(yōu)先級控制(Swarm Mode)

Docker Swarm 提供額外的優(yōu)先級機(jī)制:

version: "3.9"
services:
  web:
    image: nginx
    deploy:
      restart_policy:
        condition: on-failure
        delay: 5s
        max_attempts: 3
      update_config:
        parallelism: 1
        delay: 10s
        order: start-first   # 先啟動新容器再停止舊容器
      rollback_config:
        order: stop-first    # 先停止舊容器再啟動新容器

5. 實戰(zhàn):完整的多層依賴架構(gòu)

version: "3.9"
services:
  # 最底層:數(shù)據(jù)庫
  postgres:
    image: postgres:15-alpine
    environment:
      POSTGRES_USER: app
      POSTGRES_PASSWORD: secret
      POSTGRES_DB: myapp
    volumes:
      - pg_data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U app -d myapp"]
      interval: 5s
      timeout: 3s
      retries: 5
      start_period: 10s
  # 第二層:緩存
  redis:
    image: redis:7-alpine
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 5s
      timeout: 3s
      retries: 5
  # 第三層:消息隊列
  rabbitmq:
    image: rabbitmq:3-management-alpine
    healthcheck:
      test: rabbitmq-diagnostics -q ping
      interval: 10s
      timeout: 5s
      retries: 5
  # 第四層:數(shù)據(jù)庫遷移(一次性任務(wù))
  migration:
    build: .
    command: ["python", "manage.py", "migrate"]
    depends_on:
      postgres:
        condition: service_healthy
    profiles: ["setup"]  # 默認(rèn)不啟動,需 docker compose --profile setup up
  # 第五層:后臺工作者
  worker:
    build: .
    command: ["celery", "-A", "tasks", "worker", "-l", "info"]
    depends_on:
      postgres:
        condition: service_healthy
      redis:
        condition: service_healthy
      rabbitmq:
        condition: service_healthy
    environment:
      DATABASE_URL: postgresql://app:secret@postgres/myapp
      REDIS_URL: redis://redis:6379
      BROKER_URL: amqp://guest:guest@rabbitmq:5672
  # 最上層:Web 應(yīng)用
  web:
    build: .
    ports:
      - "8000:8000"
    depends_on:
      postgres:
        condition: service_healthy
      redis:
        condition: service_healthy
      rabbitmq:
        condition: service_healthy
      worker:
        condition: service_started  # 只需 worker 啟動即可
    environment:
      DATABASE_URL: postgresql://app:secret@postgres/myapp
      REDIS_URL: redis://redis:6379
volumes:
  pg_data:

6. 驗證與調(diào)試

# 查看容器健康狀態(tài)
docker compose ps
# 查看健康檢查日志
docker inspect --format='{{.State.Health}}' <container_id>
# 手動測試健康檢查命令
docker compose exec postgres pg_isready -U app
# 強(qiáng)制按依賴順序重建
docker compose up --build --force-recreate

關(guān)鍵要點總結(jié)

需求解決方案
僅控制啟動順序depends_on(無條件)
等待服務(wù)真正可用depends_on + condition: service_healthy + healthcheck
等待初始化任務(wù)完成condition: service_completed_successfully
多層復(fù)雜依賴鏈逐層配置 healthcheck + depends_on
生產(chǎn)環(huán)境高可用結(jié)合 Docker Swarm 的 deploy 配置

到此這篇關(guān)于Docker中配置容器啟動優(yōu)先級與依賴關(guān)系的文章就介紹到這了,更多相關(guān)Docker 容器啟動優(yōu)先級與依賴關(guān)系內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Docker如何制作自己鏡像并上傳dockerhub

    Docker如何制作自己鏡像并上傳dockerhub

    這篇文章主要介紹了Docker如何制作自己鏡像并上傳dockerhub,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-11-11
  • Docker創(chuàng)建nacos容器的方法

    Docker創(chuàng)建nacos容器的方法

    這篇文章主要介紹了Docker創(chuàng)建nacos容器的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2024-03-03
  • docker-compose配置并部署redis服務(wù)的實現(xiàn)

    docker-compose配置并部署redis服務(wù)的實現(xiàn)

    本文主要介紹了docker-compose配置并部署redis服務(wù)的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • docker啟動容器后Exited(127)問題及解決方案

    docker啟動容器后Exited(127)問題及解決方案

    作者在安裝Docker并運(yùn)行Redis容器時遇到Exited(127)問題,通過查看日志發(fā)現(xiàn)是內(nèi)核版本過舊導(dǎo)致,于是通過elrepo源升級內(nèi)核,重啟后移除舊容器并重新運(yùn)行,最終成功運(yùn)行Redis服務(wù)
    2026-04-04
  • docker部署springBoot項目實操(docker是什么)

    docker部署springBoot項目實操(docker是什么)

    Docker可以讓開發(fā)者打包他們的應(yīng)用以及依賴包到一個輕量級、可移植的容器中,然后發(fā)布到任何流行的 Linux 機(jī)器上,也可以實現(xiàn)虛擬化,這篇文章主要介紹了docker部署springBoot項目實操,需要的朋友可以參考下
    2025-03-03
  • docke-cli的調(diào)試環(huán)境搭建過程

    docke-cli的調(diào)試環(huán)境搭建過程

    在搭建docker-cli的調(diào)試環(huán)境時,遇到很多坑,通過本文講解下搭建docke-cli的調(diào)試環(huán)境的詳細(xì)方法,需要的朋友可以參考下
    2022-11-11
  • DOCKERFILE學(xué)習(xí)及使用注意事項

    DOCKERFILE學(xué)習(xí)及使用注意事項

    Dockerfile 由一行行命令語句組成,并且支持以 # 開頭的注釋行。一般的,Dockerfile分為四部分:基礎(chǔ)鏡像信息、維護(hù)者信息、鏡像操作指令、容器啟動時執(zhí)行指令
    2017-02-02
  • 如何在Docker中設(shè)置容器間通信的權(quán)限和訪問控制策略

    如何在Docker中設(shè)置容器間通信的權(quán)限和訪問控制策略

    文章介紹了使用Docker網(wǎng)絡(luò)進(jìn)行訪問控制的方法,包括自定義Bridge網(wǎng)絡(luò)、基于容器名稱的訪問控制和使用網(wǎng)絡(luò)策略(如Calico)進(jìn)行更精細(xì)的控制
    2024-11-11
  • Docker部署HertzBeat實時監(jiān)控告警系統(tǒng)

    Docker部署HertzBeat實時監(jiān)控告警系統(tǒng)

    HertzBeat是一款開源的實時監(jiān)控告警系統(tǒng),本文就來介紹一下Docker部署HertzBeat實時監(jiān)控告警系統(tǒng),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-11-11
  • docker?Get?https://registry-1.docker.io/v2/:?net/http:?request?canceled?報錯

    docker?Get?https://registry-1.docker.io/v2/:?net/http:?r

    本文主要介紹了docker?Get?https://registry-1.docker.io/v2/:?net/http:?request?canceled?報錯,具有一定的參考價值,感興趣的可以了解一下
    2025-03-03

最新評論

旬阳县| 漾濞| 济源市| 施秉县| 普定县| 共和县| 兖州市| 三门县| 松原市| 古丈县| 同心县| 卓资县| 凤阳县| 全州县| 汝阳县| 新竹市| 铜川市| 青浦区| 云霄县| 芒康县| 务川| 昔阳县| 商河县| 安仁县| 依安县| 枣庄市| 普安县| 南阳市| 普陀区| 潼南县| 漳平市| 基隆市| 五河县| 崇州市| 湟源县| 赫章县| 陕西省| 乌兰浩特市| 迁安市| 平远县| 双峰县|