国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

云服務器|WEB服務器|FTP服務器|郵件服務器|虛擬主機|服務器安全|DNS服務器|服務器知識|Nginx|IIS|Tomcat|

服務器之家 - 服務器技術 - 服務器知識 - docker compose 服務啟動順序控制的方法

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

2021-03-07 21:12wang_yb 服務器知識

這篇文章主要介紹了docker compose 服務啟動順序控制的方法,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

概要

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

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

問題重現

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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 的啟動失敗.

?
1
2
3
4
5
6
7
$ 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 的端口通了之后再啟動服務

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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;
   '

再次啟動,

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ 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 腳本, 可以接受啟動命令, 以及需要等待的服務和端口. 腳本內容如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#!/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 腳本來控制啟動順序.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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 腳本.

測試結果如下:

?
1
2
3
4
5
6
7
8
9
10
11
$ 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 參數后面的多個服務和端口用逗號(,)隔開.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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 服務時候可連接.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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;
   '

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

原文鏈接:https://www.cnblogs.com/wang_yb/p/9400291.html

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 亚洲狼人色 | 一区二区三区在线看 | 97超碰青青草 | 国产成人精品久久二区二区 | 精品久久在线 | 国产精品不卡一区二区三区 | 久久久精品蜜桃 | 国产一区二区黑人欧美xxxx | 亚洲精品成人免费 | 国产精品久久国产精品 | 天天干夜夜操 | 精品久久久一区 | 欧美综合一区 | 久久久久高清视频 | 欧美一级特黄aaaaaaa在线观看 | 日本久久免费 | 亚洲视频在线观看视频 | 欧美综合一区二区三区 | 久久美女视频 | 欧美日韩精品久久久 | 黄色片视频免费 | 自拍三区| 欧美一级片在线观看 | 一级毛片黄 | 国产精品毛片无码 | 特级淫片日本高清视频免费 | 日韩在线一区二区三区免费视频 | 中文字幕日韩视频 | 欧美日韩精品一区二区三区 | 免费污网址 | 国产一区二区三区四 | 久久不射电影网 | 国产精品99久久免费观看 | 四季久久免费一区二区三区四区 | 精品成人久久 | 91在线免费看 | 日韩精品无码一区二区三区 | 日本一区二区免费播放 | 亚洲精品福利在线 | 亚洲视频在线一区 | 免费午夜视频 |