首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  程序员

docker 部署 mysql 和 spring boot 的集群,容器启动顺序问题

  •  1
     
  •   tionsin · 232 天前 · 2174 次点击
    这是一个创建于 232 天前的主题,其中的信息可能已经有所发展或是发生改变。

    使用 docker-compose 编排以后就会出现 mysql 启动慢,导致 spring boot 没有连接数数据源无法启动..看了很多关于容器启动顺序的文章..还是没有解决..看看 v2 有没有大佬可以解决!


    这是 docker-compose.yml

    version : '2'
    services:
      mysql:
        image: jo/mysql
        volumes:
               - ./src/main/docker/mysql/my.cnf:/root/mysql/my.cnf mysql
        environment:
           - MYSQL_ROOT_PASSWORD=123456
        ports:
           - "3306:3306"
        expose:
           - "3306"
    
      frp:
        build: frp
        volumes:
          - ./wait-for-it.sh:/wait-for.sh
        ports:
          - "8999:8999"
        restart: always
        depends_on:
          - mysql
        links:
          - mysql
        entrypoint: "sh /wait-for.sh mysql:3306 -- java -Djava.security.egd=file:/dev/./urandom jar app.jar"
    
    

    运行之后没有报错,只是运行不起来..

    17 回复  |  直到 2019-02-27 09:32:13 +08:00
        1
    blackeeper   232 天前   ♥ 2
    最好的办法就是利用 docker 的健康检查功能来自动重启应用,或者程序做好数据库重连
    其实官方是有指导文档,看这个链接: https://docs.docker.com/compose/startup-order/
        2
    tionsin   232 天前
    @blackeeper 大佬我就是用的这个....但是不知道哪里有问题..
        3
    blackeeper   232 天前
    额,看了你的日志,frp 是正常退出的,返回 0 值,再看你的 compose file,我猜你的 entrypoint 有问题
        5
    Beebird   232 天前 via Android   ♥ 1
    信息似乎不够多。可以分别检查 mysql 和 frp 有没有正常启动。docker exec 进入 frp 手动连接 mysql 看是否连上。如果都正常的话,单独停止并删除 frp 再 docker-compose up -d 试试。
        6
    tionsin   232 天前
    @Beebird 都试过了,现在所有脚本,启动顺序都解决了..剩下一个 spring boot 的 appcation.yml 配置错了,连不上.我还在找 bug....orz
        7
    Junn   232 天前 via iPhone
    手动起,确定不是连接问题?
        8
    tionsin   232 天前
    @Junn 是本地打包到 linux
        9
    tionsin   232 天前
    @Beebird @Junn @blackeeper @hilbertz 已经可以了,感谢.
        10
    precisi0nux   231 天前 via iPhone
    @tionsin 可以分享一下最后的解决办法吗?
        11
    tionsin   231 天前 via Android
    @precisi0nux 就是拥抱官方文档啊
        12
    hzwjz   231 天前 via Android
    连接 MySQL 之前,写个检测 MySQL 的 entrypoint 脚本,
        13
    freakxx   231 天前
    @tionsin
    脚本挂在前台运行
        14
    indiemaple   231 天前
    @tionsin 说一下具体方法嘛
        15
    thisisgpy   231 天前
    depends_on 只是确保 frp 容器在 mysql 容器 run 起来之后启动,并不会保证 mysql 容器里面的服务启动完成。
        16
    tionsin   231 天前
    @indiemaple 就是在 mysql 完全运行之前,阻塞 spring boot;然后在 mysql 启动以后再启动 springboot;
    docker-compose 中的 spring 服务加上一个 enterpoint: entrypoint: "./w.sh mysql:3306 -- java -jar /app.jar" 这是我的程序进入点..你自己改改就行..w.sh 就是 wait-for-it.sh
        17
    tionsin   231 天前
    @thisisgpy 我知道..
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1213 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 26ms · UTC 18:00 · PVG 02:00 · LAX 11:00 · JFK 14:00
    ♥ Do have faith in what you're doing.