亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 服務器 > Web服務器 > 正文

docker compose 服務啟動順序控制的方法

2024-09-01 13:55:41
字體:
來源:轉載
供稿:網友

概要

docker-compose 可以方便組合多個 docker 容器服務, 但是, 當容器服務之間存在依賴關系時, docker-compose 并不能保證服務的啟動順序.

docker-compose 中的 depends_on 配置是容器的啟動順序, 并不是容器中服務的啟動順序.

問題重現

首先, 我們構造一個示例, 來演示 docker-compose 帶來的問題. docker-compose.yml 文件如下:

version: '2'services: web:  image: ubuntu:14.04  depends_on:   - web  command: nc -z database 3306 database:  image: ubuntu:14.04  command: >   /bin/bash -c '   sleep 5;   echo "sleep over";   nc -lk 0.0.0.0 3306;   '

啟動后, 可以發現, 確實是先啟動 database, 后啟動 web, 但是 database 中的服務是在大約 5 秒后才完成的, 所以導致 web 的啟動失敗.

$ docker-compose upCreating tmp_database_1 ... doneCreating tmp_database_1 ...Creating tmp_web_1   ... doneAttaching to tmp_database_1, tmp_web_1tmp_web_1 exited with code 1database_1 | sleep over

問題解決方式 1.0

修改 web 的啟動腳本, 等待 database 的端口通了之后再啟動服務

version: '2'services: web:  image: ubuntu:14.04  depends_on:   - database  command: >   /bin/bash -c '   while ! nc -z database 3306;   do    echo "wait for database";    sleep 1;   done;   echo "database is ready!";   echo "start web service here";   ' database:  image: ubuntu:14.04  command: >   /bin/bash -c '   sleep 5;   echo "sleep over";   nc -lk 0.0.0.0 3306;   '

再次啟動,

$ docker-compose upCreating tmp_database_1 ... doneCreating tmp_database_1 ...Creating tmp_web_1   ... doneAttaching to tmp_database_1, tmp_web_1web_1    | wait for databaseweb_1    | wait for databaseweb_1    | wait for databaseweb_1    | wait for databaseweb_1    | wait for databasedatabase_1 | sleep overweb_1    | database is ready!web_1    | start web service heretmp_web_1 exited with code 0

web 會在 database 啟動完成, 端口通了之后才啟動.

問題解決方式 2.0

上面的解決方式雖然能夠解決問題, 但是在 yaml 中直接插入腳本不好維護, 也容易出錯. 如果有多個依賴, 或者多層依賴的時候, 復雜度會直線上升.

所以, 要封裝一個 entrypoint.sh 腳本, 可以接受啟動命令, 以及需要等待的服務和端口. 腳本內容如下:

#!/bin/bash#set -x#******************************************************************************# @file  : entrypoint.sh# @author : wangyubin# @date  : 2018-08- 1 10:18:43## @brief  : entry point for manage service start order# history : init#******************************************************************************: ${SLEEP_SECOND:=2}wait_for() {  echo Waiting for $1 to listen on $2...  while ! nc -z $1 $2; do echo waiting...; sleep $SLEEP_SECOND; done}declare DEPENDSdeclare CMDwhile getopts "d:c:" argdo  case $arg in    d)      DEPENDS=$OPTARG      ;;    c)      CMD=$OPTARG      ;;    ?)      echo "unkonw argument"      exit 1      ;;  esacdonefor var in ${DEPENDS//,/ }do  host=${var%:*}  port=${var#*:}  wait_for $host $portdoneeval $CMD

這個腳本有 2 個參數, -d 需要等待的服務和端口, -c 等待的服務和端口啟動之后, 自己的啟動命令

修改 docker-compose.yml, 使用 entrypoint.sh 腳本來控制啟動順序.

version: '2'services: web:  image: ubuntu:14.04  depends_on:   - database  volumes:   - "./entrypoint.sh:/entrypoint.sh"  entrypoint: /entrypoint.sh -d database:3306 -c 'echo "start web service here"'; database:  image: ubuntu:14.04  command: >   /bin/bash -c '   sleep 5;   echo "sleep over";   nc -lk 0.0.0.0 3306;   '

實際使用中, 也可以將 entrypoint.sh 打包到發布的鏡像之中, 不用通過 volumes 配置來加載 entrypoint.sh 腳本.

測試結果如下:

$ docker-compose upStarting tmp_database_1 ... doneStarting tmp_web_1 ... doneAttaching to tmp_database_1, tmp_web_1web_1    | Waiting for database to listen on 3306...web_1    | waiting...web_1    | waiting...web_1    | waiting...database_1 | sleep overweb_1    | start web service heretmp_web_1 exited with code 0

補充

依賴多個服務和端口

使用上面的 entrypoint.sh 腳本, 也可以依賴多個服務和端口, -d 參數后面的多個服務和端口用逗號(,)隔開.

version: '2'services: web:  image: ubuntu:14.04  depends_on:   - mysql   - postgresql  volumes:   - "./entrypoint.sh:/entrypoint.sh"  entrypoint: /entrypoint.sh -d mysql:3306,postgresql:5432 -c 'echo "start web service here"'; mysql:  image: ubuntu:14.04  command: >   /bin/bash -c '   sleep 4;   echo "sleep over";   nc -lk 0.0.0.0 3306;   ' postgresql:  image: ubuntu:14.04  command: >   /bin/bash -c '   sleep 8;   echo "sleep over";   nc -lk 0.0.0.0 5432;   '

執行的效果可以自行嘗試.

嘗試間隔的配置

每次嘗試連接的等待時間可以通過 環境變量 SLEEP_SECOND 來配置, 默認 2 秒 下面的配置等待時間設置為 4 秒, 就會每隔 4 秒才去嘗試 mysql 服務時候可連接.

version: '2'services: web:  image: ubuntu:14.04  environment:   SLEEP_SECOND: 4  depends_on:   - mysql  volumes:   - "./entrypoint.sh:/entrypoint.sh"  entrypoint: /entrypoint.sh -d mysql:3306 'echo "start web service here"'; mysql:  image: ubuntu:14.04  command: >   /bin/bash -c '   sleep 4;   echo "sleep over";   nc -lk 0.0.0.0 3306;   '

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到服務器教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
色噜噜国产精品视频一区二区| 国产精品日韩精品| 欧美最猛性xxxxx免费| 国产婷婷成人久久av免费高清| 性欧美亚洲xxxx乳在线观看| 国产亚洲精品va在线观看| 操91在线视频| 国产精欧美一区二区三区| 欧美激情精品久久久久久黑人| 久久久久久69| 日韩av在线一区二区| 亚洲精品日韩av| 欧美大学生性色视频| 欧美电影在线播放| 最新国产精品拍自在线播放| 国内免费精品永久在线视频| 中文字幕亚洲在线| 国产精欧美一区二区三区| 国产成人精品日本亚洲专区61| 91国在线精品国内播放| 日韩一区二区三区在线播放| 精品福利樱桃av导航| 亚洲精品大尺度| 欧美极品少妇与黑人| 日本道色综合久久影院| 欧美激情一区二区三区成人| 最近2019年中文视频免费在线观看| 欧美激情亚洲综合一区| 伊人激情综合网| 亚洲综合在线做性| 国产精品久久久久9999| 日韩激情视频在线播放| 91精品国产一区| 色香阁99久久精品久久久| 日韩av免费在线观看| 欧洲美女7788成人免费视频| 欧美日韩视频在线| 国产亚洲精品高潮| 91欧美日韩一区| 青青草原成人在线视频| 久久露脸国产精品| 成人国产精品av| 日韩精品免费看| 久久91精品国产| 日本亚洲欧美三级| 丰满岳妇乱一区二区三区| 韩国v欧美v日本v亚洲| 欧美交受高潮1| 亚洲国产精品一区二区三区| 2019中文在线观看| 欧美巨乳美女视频| 狠狠综合久久av一区二区小说| 久久久久亚洲精品成人网小说| 777国产偷窥盗摄精品视频| 亚洲伦理中文字幕| 久久久噜噜噜久久中文字免| 久久精品视频99| 992tv在线成人免费观看| 亚洲精品一区二区三区婷婷月| 欧美大片va欧美在线播放| 97色在线观看免费视频| 久久五月天综合| 亚洲一区二区三区在线免费观看| 91成人在线视频| 久久香蕉国产线看观看av| 国产欧美日韩中文字幕| 在线日韩欧美视频| 久久最新资源网| 日韩中文字幕在线免费观看| 国产精品嫩草影院一区二区| www日韩欧美| 欧美日韩亚洲视频| 日韩高清人体午夜| 国产精品久久久久久搜索| 欧美丝袜一区二区三区| 国产xxx69麻豆国语对白| 日韩精品久久久久| 91av在线免费观看| 美日韩精品视频免费看| 日本sm极度另类视频| 91美女片黄在线观| 日韩av在线免费看| 日韩在线观看你懂的| 国产精品三级网站| 亚洲美腿欧美激情另类| 亚洲性夜色噜噜噜7777| 欧美性高跟鞋xxxxhd| 亚洲国产成人精品久久| 亚洲一区999| 1769国内精品视频在线播放| 久久精品视频免费播放| 97香蕉久久超级碰碰高清版| 久久手机精品视频| 国产亚洲精品久久久久久777| 国产亚洲视频在线| 国产精品视频网| 欧美怡春院一区二区三区| 欧美成人在线影院| 午夜精品一区二区三区在线视频| 亚洲电影第1页| 欧美理论电影网| 精品美女永久免费视频| 欧美刺激性大交免费视频| 欧美日韩激情小视频| 久久琪琪电影院| 亚洲伊人久久大香线蕉av| 日本伊人精品一区二区三区介绍| 91免费欧美精品| 久久久在线免费观看| 亚洲成人a**站| 国产精品男女猛烈高潮激情| 日韩中文字幕在线| 亚洲综合日韩在线| 欧美另类99xxxxx| 欧美怡春院一区二区三区| 亚洲欧美制服中文字幕| 欧美激情一级二级| 亚洲精品久久久久国产| 久久人人爽人人爽人人片av高请| 亚洲国产美女精品久久久久∴| 成人黄色中文字幕| 日韩在线免费观看视频| 亚洲国产精品va在线看黑人| 欧美寡妇偷汉性猛交| 欧美第一淫aaasss性| 久久久免费电影| 中文字幕日韩欧美在线视频| 久久精品国产一区| 亚洲第一区第一页| 欧美日韩亚洲视频一区| 日韩中文字幕亚洲| 5566成人精品视频免费| 91av在线免费观看视频| 亚洲成人黄色在线观看| 国产精品美女在线| 亚洲国产古装精品网站| 日韩女优在线播放| 久久久人成影片一区二区三区| 国产成人在线一区| 国产一区二区激情| 成人免费自拍视频| 国产精品久久一区主播| 国内精品久久久久影院 日本资源| 国产精品中文字幕在线观看| 亚洲jizzjizz日本少妇| 亚洲人成在线免费观看| 尤物tv国产一区| 欧美日韩另类字幕中文| 欧美床上激情在线观看| 日韩精品一区二区视频| 亚洲精品网站在线播放gif| 亚洲精品欧美日韩专区| 欧美日韩在线第一页| 亚洲欧洲在线免费| 欧美国产日韩一区二区在线观看| 色综合久久中文字幕综合网小说| 国产精品99久久久久久白浆小说| 2018国产精品视频| 色天天综合狠狠色| 国模视频一区二区| 亚洲福利在线播放| 国产美女扒开尿口久久久| 欧美中文字幕在线视频| 欧美综合国产精品久久丁香|