婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > docker compose 服務啟動順序控制的方法

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

熱門標簽:河南省鄭州市地圖標注 福州呼叫中心外呼系統哪家好 地圖標注w是什么方向 新鄉人工智能電話機器人加盟 400電話申請找哪家公司 七大洲地圖標注 昆明外呼系統 地圖標注需要提交啥資料入駐 臨汾電銷機器人費用

概要

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 up
Creating tmp_database_1 ... done
Creating tmp_database_1 ...
Creating tmp_web_1   ... done
Attaching to tmp_database_1, tmp_web_1
tmp_web_1 exited with code 1
database_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 up
Creating tmp_database_1 ... done
Creating tmp_database_1 ...
Creating tmp_web_1   ... done
Attaching to tmp_database_1, tmp_web_1
web_1    | wait for database
web_1    | wait for database
web_1    | wait for database
web_1    | wait for database
web_1    | wait for database
database_1 | sleep over
web_1    | database is ready!
web_1    | start web service here
tmp_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 DEPENDS
declare CMD

while getopts "d:c:" arg
do
  case $arg in
    d)
      DEPENDS=$OPTARG
      ;;
    c)
      CMD=$OPTARG
      ;;
    ?)
      echo "unkonw argument"
      exit 1
      ;;
  esac
done

for var in ${DEPENDS//,/ }
do
  host=${var%:*}
  port=${var#*:}
  wait_for $host $port
done

eval $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 up
Starting tmp_database_1 ... done
Starting tmp_web_1 ... done
Attaching to tmp_database_1, tmp_web_1
web_1    | Waiting for database to listen on 3306...
web_1    | waiting...
web_1    | waiting...
web_1    | waiting...
database_1 | sleep over
web_1    | start web service here
tmp_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;
   '

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

標簽:股票 鎮江 烏海 臨沂 紅河 海口 岳陽 四川

巨人網絡通訊聲明:本文標題《docker compose 服務啟動順序控制的方法》,本文關鍵詞  docker,compose,服務,啟動,順序,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《docker compose 服務啟動順序控制的方法》相關的同類信息!
  • 本頁收集關于docker compose 服務啟動順序控制的方法的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    日韩电影在线观看电影| 欧美精品久久久久久久多人混战| 性欧美疯狂xxxxbbbb| 亚洲午夜私人影院| 日韩—二三区免费观看av| 美国三级日本三级久久99| 蜜桃av噜噜一区二区三区小说| 亚洲人吸女人奶水| 日本强好片久久久久久aaa| 久久国产剧场电影| av欧美精品.com| 91日韩一区二区三区| 777久久久精品| 亚洲女厕所小便bbb| 久久精品国产亚洲高清剧情介绍| 国产精品一品视频| 欧美日韩免费不卡视频一区二区三区| 精品女同一区二区| 亚洲精品免费看| 国产综合久久久久影院| 色欧美片视频在线观看| 精品国产区一区| 日韩精品一级中文字幕精品视频免费观看| 精品一区二区三区免费观看 | 欧美中文字幕一二三区视频| 2023国产精品| 视频在线观看国产精品| 色94色欧美sute亚洲线路二| 欧美国产日韩在线观看| 狠狠色综合播放一区二区| 91.xcao| 亚洲综合激情网| 欧洲亚洲精品在线| 国产精品国产自产拍高清av王其| 麻豆91免费看| 国产婷婷色一区二区三区在线| 麻豆传媒一区二区三区| 精品动漫一区二区三区在线观看| 蜜臀av性久久久久蜜臀av麻豆| 欧美日韩成人综合天天影院| 天堂av在线一区| 欧美一区二区免费视频| 最新成人av在线| 丝袜美腿亚洲色图| 成人午夜精品一区二区三区| 欧美老女人在线| 亚洲免费观看高清完整版在线观看熊| 中文在线一区二区| 捆绑调教美女网站视频一区| 国产一区二区三区不卡在线观看 | 久久99精品久久久久婷婷| 色天使色偷偷av一区二区| 国产精品你懂的在线| 在线精品视频一区二区三四| 亚洲成人1区2区| 久久久国产综合精品女国产盗摄| 国内精品第一页| 日韩国产一二三区| 国产日韩成人精品| 欧美美女喷水视频| 99久久久无码国产精品| 久久66热re国产| 亚洲自拍欧美精品| 日本一区二区视频在线观看| 色天天综合色天天久久| 国产aⅴ精品一区二区三区色成熟| 日韩美女久久久| 久久精品亚洲精品国产欧美kt∨ | 精品999在线播放| 欧美性感一区二区三区| 成人aa视频在线观看| 国产精品99精品久久免费| 日本aⅴ精品一区二区三区| 亚洲一区影音先锋| 洋洋av久久久久久久一区| 亚洲色图制服诱惑 | 99久久er热在这里只有精品15 | 亚洲国产乱码最新视频| 亚洲欧美一区二区三区极速播放| 精品国产区一区| 久久久av毛片精品| 国产欧美日本一区二区三区| 亚洲国产精品精华液ab| 日韩一区欧美小说| 亚洲精品国产无天堂网2021| 亚洲亚洲精品在线观看| 亚洲成国产人片在线观看| 石原莉奈一区二区三区在线观看| 亚洲国产成人精品视频| 日本少妇一区二区| voyeur盗摄精品| 精品sm在线观看| 亚洲人成伊人成综合网小说| 日本中文字幕一区二区视频| 国产精品综合一区二区三区| 99久久er热在这里只有精品15| 欧美伊人久久大香线蕉综合69| 91精品欧美一区二区三区综合在| 国产三级三级三级精品8ⅰ区| 一二三四区精品视频| 国产大片一区二区| 91精品国产入口| 《视频一区视频二区| 国内精品嫩模私拍在线| 91精品国产91久久综合桃花| 一区二区在线免费| 国产高清不卡一区| 精品久久免费看| 久久国产三级精品| 精品国产乱码久久久久久闺蜜| www久久精品| 舔着乳尖日韩一区| 欧美精品九九99久久| 一区二区久久久久久| 色悠悠亚洲一区二区| 亚洲女人小视频在线观看| 色综合一个色综合亚洲| 洋洋av久久久久久久一区| 天堂精品中文字幕在线| 久久久99精品久久| 天天影视涩香欲综合网| 欧美日韩不卡在线| 九一九一国产精品| 日本一区二区在线不卡| 91精品国产综合久久精品图片| 成人听书哪个软件好| 日韩电影免费在线观看网站| 中文字幕一区三区| 91精品国产综合久久久久久| 精品1区2区3区| www.色综合.com| 国产一区二区三区美女| 午夜影视日本亚洲欧洲精品| 国产精品理论片在线观看| 欧美精品一区二区三区高清aⅴ | 国产原创一区二区三区| 亚洲一区二区在线视频| 亚洲一级二级在线| 久久精品欧美一区二区三区不卡 | 99riav一区二区三区| 国产精品自在欧美一区| 亚洲成人免费影院| 亚洲自拍另类综合| 视频一区欧美日韩| 日本欧美久久久久免费播放网| 亚洲午夜久久久久久久久电影网| 午夜成人免费视频| 日本sm残虐另类| 成人午夜精品在线| 色综合久久久久综合体| 91福利在线免费观看| 白白色 亚洲乱淫| 国产69精品一区二区亚洲孕妇| 国产精品乡下勾搭老头1| 高清shemale亚洲人妖| 日本韩国欧美一区| 亚洲精品在线电影| 亚洲免费高清视频在线| 日韩综合小视频| 成人免费观看男女羞羞视频| 91一区二区在线| 日韩一区和二区| 亚洲欧美韩国综合色| 欧美a级理论片| 欧美色爱综合网| 久久精品水蜜桃av综合天堂| 亚洲精品国产一区二区三区四区在线 | 国产精品国产三级国产aⅴ无密码| 国产精品美女一区二区在线观看| 午夜精品123| 成人动漫一区二区三区| 欧美日韩一区视频| 亚洲一区二区三区四区在线免费观看| 国产高清亚洲一区| 亚洲日韩欧美一区二区在线| 成人在线综合网| 国产欧美精品一区| 97se亚洲国产综合自在线不卡| 欧美国产精品一区二区三区| 99麻豆久久久国产精品免费优播| 中文字幕人成不卡一区| 91久久精品一区二区三| 免费人成在线不卡| 中文字幕 久热精品 视频在线 | 国产毛片精品国产一区二区三区| 不卡的电视剧免费网站有什么| 欧美剧在线免费观看网站| 一区二区不卡在线视频 午夜欧美不卡在 | 91成人在线免费观看| 中文成人av在线| 在线观看国产精品网站| 亚洲高清视频在线| 日韩欧美精品三级| 丰满亚洲少妇av| 亚洲视频在线一区观看| 精品视频免费看| 国产福利电影一区二区三区| 亚洲自拍欧美精品| 国产欧美一区二区精品久导航| 国产成人精品www牛牛影视|