如果對(duì)你有幫助希望點(diǎn)贊收藏~
轉(zhuǎn)載請(qǐng)注明出處~
歡迎批評(píng)、指點(diǎn)、討論~
https://blog.csdn.net/L_Open2021/article/details/129901741
目錄
1.問(wèn)題描述
2.問(wèn)題解決
方法1:通過(guò) depends_on 結(jié)合 healthcheck 實(shí)現(xiàn)容器順序啟動(dòng)(強(qiáng)烈推薦?。?/p>
?方案2:shell腳本彈窗被依賴(較復(fù)雜)
方案3:通過(guò)Docker file 設(shè)置延時(shí)啟動(dòng)(不推薦,偽順序)
1.問(wèn)題描述
在微服務(wù)項(xiàng)目中,多容器之間存在相關(guān)依賴的關(guān)系。
B容器啟動(dòng)時(shí)會(huì)調(diào)用A容器部分接口,所以存在B容器會(huì)由于A容器而啟動(dòng)失敗的情況
2.問(wèn)題解決
方法1:通過(guò) depends_on 結(jié)合 healthcheck 實(shí)現(xiàn)容器順序啟動(dòng)(強(qiáng)烈推薦?。?/h3>
例:webB容器依賴了webA容器
先來(lái)看docker-compose
services:
webA:
restart: always
environment:
MYSQL_PWD: 123456
container_name: webA
image: webA
healthcheck:
# http://localhost:4000/health 為webA容器指定的健康檢查接口
test: ["CMD", "curl", "-f", "http://localhost:4000/health"]
# 健康檢查的間隔,默認(rèn)為 30 秒,單位(h/m/s);
interval: 30s
# 健康檢查命令運(yùn)行超時(shí)時(shí)間,如果超過(guò)這個(gè)時(shí)間,本次健康檢查就被視為失敗,單位(h/m/s);
timeout: 20s
# 當(dāng)連續(xù)失敗指定次數(shù)后,則將容器狀態(tài)視為 unhealthy。
retries: 5
webB:
restart: always
environment:
MYSQL_PWD: 123456
container_name: webB
image: webB
# webA容器之后啟動(dòng),并且webA容器的健康狀態(tài)為healthy
depends_on:
webA:
condition: service_healthy
webB容器啟動(dòng)前會(huì)根據(jù)webA容器的健康狀態(tài)來(lái)判斷是否啟動(dòng),而webA容器的健康狀態(tài)根據(jù)設(shè)定的healthcheck中指定的心跳監(jiān)測(cè)接口來(lái)確定
服務(wù)調(diào)用關(guān)系是 webA?->?webB,我們的服務(wù)由于存在token校驗(yàn)機(jī)制,就算服務(wù)啟動(dòng)成功了,直接調(diào)用 [ip:端口]還是會(huì)失敗【curl: (22) The requested URL returned error: 424】
所以在webA服務(wù)中增加了一個(gè)開(kāi)放的可以繞過(guò)token校驗(yàn)的接口用于服務(wù)心跳監(jiān)測(cè),從而判斷健康狀態(tài)
當(dāng)webA服務(wù)啟動(dòng)時(shí)會(huì)自動(dòng)監(jiān)測(cè)健康狀態(tài),直到確認(rèn)為unhealthy時(shí),bgi服務(wù)會(huì)啟動(dòng)失敗
實(shí)際案例(順序 upms -> bgi -> thingsboard):
失敗時(shí):?
?等待狀態(tài):
成功狀態(tài):
?方案2:shell腳本彈窗被依賴(較復(fù)雜)
????????思路:在容器啟動(dòng)命令執(zhí)行之前,跑一個(gè)shell腳本,通過(guò)shell nc 端口探測(cè)被依賴容器來(lái)確定被依賴的容器是否ready,隨后再去啟動(dòng)后者。
? ? ? ? 1. 直接手寫shell腳本,通過(guò) nc 端口探測(cè)。
https://blog.51cto.com/topic/docker-rongqiqidongshunxu.html
? ? ? ? 2. github上的一個(gè)開(kāi)源項(xiàng)目 wait-for-it,拆箱即用
https://www.jianshu.com/p/c54899d50d05文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-470328.html
方案3:通過(guò)Docker file 設(shè)置延時(shí)啟動(dòng)(不推薦,偽順序)
思路:根據(jù)服務(wù)實(shí)際啟動(dòng)時(shí)間,對(duì)每個(gè)服務(wù)進(jìn)行合理的延時(shí)時(shí)間分配?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-470328.html
到了這里,關(guān)于Docker容器配置啟動(dòng)順序的三種方式的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!