成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

解決 WebAPI 在容器中的啟動初始化問題

云計算 云原生 MySQL
Docker 容器啟動時,WebAPI 程序啟動的速度比 MySQL 快,導致程序去連接 MySQL 時,MySQL 服務器還沒有啟動完成,自然是連不上。

在產品或項目的部署中,如果和下面場景類似,那么本文可能對您有所幫助。

場景

  • WebAPI 和  MySql  數據部署在同一服務器(通常是測試環境)。
  • WebAPI 和  MySql  使用  docker-compose  進行部署。
  • WebAPI  啟動時有一些初始化的操作要做,而初始化需要從  MySql  中獲取數據。

問題

  • 第一次部署,執行  docker-compose up -d  后,WebAPI  不能正常啟動。
  • 斷電、或其他原因導致的服務器重啟或  docker  重啟,WebAPI  不能正常啟動。

原因

  • docker  容器啟動時,WebAPI  程序啟動的速度比  MySql  快,導致程序去連接  MySql  時,MySql  服務器還沒有啟動完成,自然是連不上。

假象

在  docker-compose.yml 文件中可以添加 depends_on 來設置依賴,如下:

api:
  restart: always
  image: netapi
  ports:
    - "5000:5000"
  environment:
    - TZ=Asia/Shanghai  
  depends_on:
    - mysql
  networks:
   s2_net:
    ipv4_address: 172.66.9.5

在 api  的 depends_on 設置 mysql ,表示 api  依賴  mysql ,只有當  mysql  啟動后,api  才會啟動。

但很可惜,這里的  mysql  啟動指的是  mysql  的容器是否啟動了,而不是  mysql  的服務是否啟動。所以,這種配置只能控制容器的啟動順序,并不能解決問題。

解決

要解決這個問題,有兩種方式:

  • 在 WebAPI 項目中使用 Polly 庫,它是一個 .NET 的彈性和瞬態故障處理庫,可以實現重試、斷路器、超時等策略來處理網絡請求失敗的情況。可以使用 Polly 來嘗試連接 mysql 服務,并在失敗時進行重試或等待。
  • 優化 depends_on 配置。

本文著重介紹的是第二種方式,進行 depends_on 配置的優化。

優化思路

  • mysql  服務添加 healthcheck 檢查,用來判斷  mysql 的服務是否正常啟動。
  • api  服務的 depends_on 監聽這個檢查,只有當 mysql 服務正常啟動后,api  才會啟動。

完整  docker-compose.yml

version: "3"

networks:
 s2_net:
  driver: bridge
  ipam:
   driver: default
   config:
    - subnet: 172.66.9.0/24

services:
 mysql:
  restart: always
  image: mysql/mysql-server:latest
  ports:
    - "3306:3306"
  environment:
    - TZ=Asia/Shanghai
    - MYSQL_ROOT_PASSWORD=123456
  healthcheck:
    test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost", "-u", "root", "--password=123456"]
    interval: 3s
    timeout: 5s
    retries: 3
    start_period: 5s
  command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci --default-authentication-plugin=mysql_native_password
  networks:
   s2_net:
    ipv4_address: 172.66.9.2
 
 api:
  restart: always
  image: netapi
  ports:
    - "5000:5000"
  environment:
    - TZ=Asia/Shanghai  
  depends_on:
    mysql:
      condition: service_healthy
  networks:
   s2_net:
    ipv4_address: 172.66.9.5

mysql  服務中添加 healthcheck 屬性,子屬性解釋如下:

  • test:設置健康檢查的命令。
  • interval:定義健康檢查的間隔時間,上面配置為間隔  3  秒。
  • timeout:健康檢查的超時時間。
  • retries:定義了健康檢查失敗后的重試次數。
  • start_period:默認值為 0 秒,表示容器啟動后立即進行健康檢查。如果將 start_period 設置為非零值,則 Docker 會在容器啟動后先等待一段時間,然后再開始進行健康檢查。

api  服務的配置為固定寫法。

注意事項

如果您的  docker-compose  安裝的是  1.27  以下的版本,需要升級到  1.27  或以上版本。

因為 docker-compose 3  不支持 depends_on  的條件設置, 但從 1.27.0 開始,2.x 和 3.x 與 COMPOSE_SPEC 架構合并,版本現在是兼容的。

可以使用下面命令進行  docker-compose  版本的查看:

docker-compose -v

安裝  docker-compose   可以使用下面命令:

curl -L https://github.com/docker/compose/releases/download/1.28.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

升級到  1.28.0 后,執行  docker-compose  的命令時可能會出現錯誤,錯誤提示如下:

[29250] Error loading Python lib '/tmp/_MEIYmY20a/libpython3.9.so.1.0': dlopen: /lib64/libc.so.6: version `GLIBC_2.28' not found (required by /tmp/_MEIYmY20a/libpython3.9.so.1.0)

按照提示  google 下,會有很多方式解決,或者直接參考這個鏈接:https://blog.csdn.net/wangying202/article/details/113178159。

總結

在  docker-compose  中進行設置是一種偷懶的做法,適用于測試環境,因為生產環境程序和數據庫通常在不同的服務器。

最好的方式還是應該在  WebAPI  程序中進行處理。

責任編輯:姜華 來源: 不止dotNET
相關推薦

2010-03-25 14:42:33

2020-12-03 09:50:52

容器IoC流程

2024-01-15 06:34:09

Gin鏡像容器

2023-05-03 23:48:24

Spring容器初始化

2019-11-04 13:50:36

Java數組編程語言

2010-06-21 10:25:09

Linux APM

2025-03-14 10:37:24

SpringSpring IOC容器

2025-05-21 10:09:09

Spring 5.xIOC編程

2011-06-17 15:29:44

C#對象初始化器集合初始化器

2022-03-21 09:50:50

JavaGroovy映射Map

2011-06-09 14:13:06

C++JAVA缺省初始化

2022-03-30 08:19:12

JavaGroovy

2010-03-11 19:25:35

Python環境

2023-10-06 20:57:52

C++聚合成員

2023-11-12 23:08:17

C++初始化

2016-09-14 22:22:03

Android Vue性能優化

2011-03-16 10:52:20

2012-03-13 13:38:42

Java

2009-06-10 16:17:00

Netbeans JT初始化

2021-07-07 05:00:17

初始化源碼
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久小视频 | 成人免费视频观看 | 亚洲精品一区二区在线观看 | 欧美日韩电影一区二区 | 国产第一区二区 | 久久精品国产免费 | 黄色大片在线播放 | av手机免费在线观看 | 欧美久久精品一级c片 | 亚洲夜射 | 欧美 日韩 中文 | 久久久久久久久91 | 国产激情毛片 | 中文字幕国产 | 日韩电影中文字幕在线观看 | 欧美h视频| 亚洲国产成人精品久久久国产成人一区 | 欧美一区二区三区 | 午夜影视 | 麻豆av网站 | 欧美日韩高清在线一区 | 韩日在线视频 | 国产视频中文字幕在线观看 | 久草成人网 | 国产精品一区二区三区久久久 | 成人精品 | 91亚洲国产成人久久精品网站 | 超碰成人在线观看 | 欧美极品一区二区 | 国产精品久久久久久吹潮 | 国产精品a久久久久 | 91久久北条麻妃一区二区三区 | 北条麻妃一区二区三区在线视频 | 久久精选| 亚洲一二视频 | 波多野吉衣在线播放 | 精品一区在线 | 久久av综合| 黄色免费在线网址 | www.国产日本 | 波霸ol一区二区 |