docker-compose 启动顺序

作者: billJiang | 来源:发表于2017-09-01 09:23 被阅读1034次

    在docker-compose的配置文件中,通过配置depends_on, links, volumes_from, 以及 network_mode: "service:...".可以控制服务的启动顺序,但是却不能知道被依赖的服务是否启动完毕,在一个服务必须要依赖另一个服务完成的时候,这样就会有问题。

    比如在微服务需要依赖微服务配置中心,在配置中心没有加载完毕的时候,微服务就会出现无法加载配置的错误。

    这个问题,官网的文档上有描述

    depends_on
    Controlling startup order in Compose

    解决的办法有以下几种:

    • 1、足够的容错和重试机制,比如连接数据库,在初次连接不上的时候,服务消费者可以不断重试,直到连接上位置

    • 2、docker-compose拆分,分成两部分部署,将要先启动的服务放在一个docker-compose中,后启动的服务放在两一个docker-compose中,启动两次,两者使用同一个网络。

    • 3、同步等待,使用wait-for-it.sh或者其他shell脚本将当前服务启动阻塞,直到被依赖的服务加载完毕
      wait-for-it的github地址为:wait-for-it

    改写后的docker-compose如下:

    version: "2"
    services:
      web:
        build: .
        ports:
          - "80:8000"
        depends_on:
          - "db"
        command: ["./wait-for-it.sh", "db:5432", "--", "python", "app.py"]
      db:
        image: postgres
    
    

    相关文章

      网友评论

        本文标题:docker-compose 启动顺序

        本文链接:https://www.haomeiwen.com/subject/hpjhjxtx.html