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

Docker容器實(shí)現(xiàn)按順序啟動的完整指南

 更新時(shí)間:2025年12月18日 08:17:50   作者:風(fēng)象南  
在日常開發(fā)和運(yùn)維中,我們會遇到這樣的需求,即多個(gè) Docker 容器需要按特定順序啟動,下面小編就和大家詳細(xì)介紹一下具體的實(shí)現(xiàn)方法吧

在日常開發(fā)和運(yùn)維中,我們會遇到這樣的需求:多個(gè) Docker 容器需要按特定順序啟動。例如,應(yīng)用依賴數(shù)據(jù)庫,消息隊(duì)列依賴服務(wù)初始化等,如果順序啟動不當(dāng),可能導(dǎo)致容器無法正常運(yùn)行或出現(xiàn)錯(cuò)誤。

問題背景

假設(shè)有三個(gè)服務(wù):

1.數(shù)據(jù)庫服務(wù)(MySQL)

2.緩存服務(wù)(Redis)

3.應(yīng)用服務(wù)(Spring Boot Web 應(yīng)用)

如果應(yīng)用服務(wù)在數(shù)據(jù)庫或緩存尚未就緒時(shí)啟動,就會出現(xiàn)啟動失敗或報(bào)錯(cuò)。傳統(tǒng) Docker 啟動方式(docker run -d)是異步啟動的,無法保證順序。

實(shí)現(xiàn)思路

按順序啟動 Docker 容器,主要有以下幾種方法:

1.使用 Docker Compose depends_on

2.在容器入口腳本中等待依賴就緒

3.使用外部腳本(Shell/Makefile)控制啟動順序

1. Docker Composedepends_on

Docker Compose 提供了 depends_on 配置,可以指定啟動依賴:

version: "3.9"

services:
  mysql:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: root
    ports:
      - "3306:3306"

  redis:
    image: redis:7.0
    ports:
      - "6379:6379"

  app:
    image: my-springboot-app:latest
    depends_on:
      - mysql
      - redis
    ports:
      - "8080:8080"

注意:

  • depends_on 只保證 容器啟動順序,并不能保證依賴服務(wù)就緒。
  • 如果數(shù)據(jù)庫啟動慢,應(yīng)用服務(wù)可能仍然啟動失敗。

2. 容器入口腳本等待依賴

為解決“容器啟動順序不等于服務(wù)就緒”的問題,可以在應(yīng)用容器的入口腳本中增加 依賴等待邏輯

#!/bin/bash
# wait-for.sh

# 等待 MySQL 啟動
until nc -z -v -w30 mysql 3306; do
  echo "Waiting for MySQL..."
  sleep 3
done

# 等待 Redis 啟動
until nc -z -v -w30 redis 6379; do
  echo "Waiting for Redis..."
  sleep 3
done

echo "All dependencies are up. Starting application..."
java -jar /app/my-springboot-app.jar

然后在 Dockerfile 中:

COPY wait-for.sh /wait-for.sh
RUN chmod +x /wait-for.sh
ENTRYPOINT ["/wait-for.sh"]

優(yōu)點(diǎn):

  • 可以保證服務(wù)依賴完全就緒后再啟動應(yīng)用
  • 支持多層級依賴

3. 外部腳本控制啟動順序

如果不使用 Compose,也可以用 Shell 腳本控制容器按順序啟動:

#!/bin/bash

docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=root mysql:8.0
echo "Waiting for MySQL..."
sleep 20  # 簡單等待,或使用健康檢查循環(huán)

docker run -d --name redis redis:7.0
echo "Waiting for Redis..."
sleep 10

docker run -d --name app --link mysql --link redis my-springboot-app:latest

改進(jìn)版:可以使用 docker inspect 檢查容器健康狀態(tài),動態(tài)判斷是否就緒,而不是固定 sleep 時(shí)間。

4. 健康檢查 + Compose 等待策略

在 Docker Compose 中可以使用 healthcheck 配合 depends_on 條件:

services:
  mysql:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: root
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      interval: 5s
      retries: 5

  redis:
    image: redis:7.0
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 5s
      retries: 5

  app:
    image: my-springboot-app:latest
    depends_on:
      mysql:
        condition: service_healthy
      redis:
        condition: service_healthy

優(yōu)點(diǎn):

  • 自動等待依賴容器健康
  • 避免硬編碼 sleep 時(shí)間,提高啟動可靠性

總結(jié)

按順序啟動 Docker 容器不僅僅是容器啟動順序問題,更重要的是 服務(wù)依賴就緒問題

實(shí)際需要根據(jù)項(xiàng)目復(fù)雜度選擇合適的啟動策略

方案適用場景優(yōu)點(diǎn)缺點(diǎn)
簡單depends_on服務(wù)啟動快、依賴簡單的場景配置簡單,開箱即用不保證服務(wù)就緒
健康檢查 + depends_on生產(chǎn)環(huán)境、復(fù)雜依賴可靠性高,自動化管理需要配置健康檢查
入口腳本等待需要精細(xì)化控制靈活可控,支持復(fù)雜邏輯需要編寫和維護(hù)腳本
外部腳本特殊定制需求完全自定義控制流程維護(hù)成本高

到此這篇關(guān)于Docker容器實(shí)現(xiàn)按順序啟動的完整指南的文章就介紹到這了,更多相關(guān)Docker容器啟動內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • docker簡單部署Django項(xiàng)目實(shí)例

    docker簡單部署Django項(xiàng)目實(shí)例

    使用Docker部署Django項(xiàng)目需配置Nginx和uWSGI,注意端口沖突并禁用宿主機(jī)原有服務(wù),通過自定義bridge網(wǎng)絡(luò)實(shí)現(xiàn)容器間通信,掛載靜態(tài)文件目錄,利用腳本簡化部署流程,確保容器與宿主機(jī)網(wǎng)絡(luò)隔離且可互相訪問
    2025-09-09
  • Docker搭建PHP運(yùn)行環(huán)境完整步驟(圖文教程)

    Docker搭建PHP運(yùn)行環(huán)境完整步驟(圖文教程)

    PHP是一種廣泛使用的編程語言,被用于Web開發(fā)和服務(wù)器管理等各種用途,而Docker則是一種非常流行的容器化平臺,可以方便地管理應(yīng)用程序和環(huán)境,這篇文章主要給大家介紹了關(guān)于Docker搭建PHP運(yùn)行環(huán)境的完整步驟,需要的朋友可以參考下
    2023-09-09
  • Docker刪除某個(gè)鏡像的實(shí)現(xiàn)方法

    Docker刪除某個(gè)鏡像的實(shí)現(xiàn)方法

    在使用 Docker 時(shí),經(jīng)常需要刪除不再需要的鏡像、容器和卷,以釋放存儲空間,本文主要介紹了Docker刪除某個(gè)鏡像的實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-02-02
  • Docker中Dockerfile之容器中運(yùn)行MyEclipse搭建的JavaWeb項(xiàng)目

    Docker中Dockerfile之容器中運(yùn)行MyEclipse搭建的JavaWeb項(xiàng)目

    本篇文章主要介紹了Docker中Dockerfile之容器中運(yùn)行MyEclipse搭建的JavaWeb項(xiàng)目,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-02-02
  • docker-compose安裝MySQL8.0.39全過程

    docker-compose安裝MySQL8.0.39全過程

    這篇文章主要介紹了docker-compose安裝MySQL8.0.39全過程,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-10-10
  • 使用Docker命令查看容器最后300行實(shí)時(shí)日志

    使用Docker命令查看容器最后300行實(shí)時(shí)日志

    在日常的容器化應(yīng)用管理中,日志是排查問題、監(jiān)控運(yùn)行狀態(tài)的重要工具,Docker 提供了簡便的命令來查看容器日志,幫助開發(fā)者和運(yùn)維人員快速定位問題,本篇博客將詳細(xì)介紹如何使用 Docker 命令查看指定容器的最后 300 行實(shí)時(shí)日志,需要的朋友可以參考下
    2025-03-03
  • 將普通用戶加入Docker組,使用docker問題

    將普通用戶加入Docker組,使用docker問題

    這篇文章主要介紹了將普通用戶加入Docker組,使用docker問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • docker環(huán)境下分布式運(yùn)行jmeter的教程詳解

    docker環(huán)境下分布式運(yùn)行jmeter的教程詳解

    這篇文章主要介紹了docker環(huán)境下分布式運(yùn)行jmeter的教程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • Docker MySQL 單主從及分表函數(shù)的解決方案

    Docker MySQL 單主從及分表函數(shù)的解決方案

    本文介紹了MySQL單主從配置和按月分表兩種方案,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2025-10-10
  • Docker鏡像保存為文件及從文件導(dǎo)入鏡像的方法

    Docker鏡像保存為文件及從文件導(dǎo)入鏡像的方法

    本篇文章主要介紹了Docker鏡像保存為文件及從文件導(dǎo)入鏡像的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-03-03

最新評論

宝鸡市| 高密市| 鄂尔多斯市| 六盘水市| 高淳县| 北安市| 新昌县| 鄱阳县| 宣汉县| 英德市| 绥化市| 长治县| 富宁县| 龙陵县| 大竹县| 五河县| 双鸭山市| 吉林省| 巩留县| 新兴县| 界首市| 天气| 万州区| 夏邑县| 南投县| 栾川县| 体育| 沈丘县| 桃园市| 莱州市| 温泉县| 绍兴市| 思茅市| 海兴县| 寿宁县| 富民县| 城步| 天台县| 天祝| 乌拉特中旗| 观塘区|