
使用 docker-compose 编排以后就会出现 mysql 启动慢,导致 spring boot 没有连接数数据源无法启动..看了很多关于容器启动顺序的文章..还是没有解决..看看 v2 有没有大佬可以解决!
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" 运行之后没有报错,只是运行不起来..

1 blackeeper 2019-02-26 23:24:11 +08:00 最好的办法就是利用 docker 的健康检查功能来自动重启应用,或者程序做好数据库重连 其实官方是有指导文档,看这个链接: https://docs.docker.com/compose/startup-order/ |
2 tionsin OP @blackeeper 大佬我就是用的这个....但是不知道哪里有问题.. |
3 blackeeper 2019-02-26 23:32:45 +08:00 额,看了你的日志,frp 是正常退出的,返回 0 值,再看你的 compose file,我猜你的 entrypoint 有问题 |
4 hilbertz 2019-02-26 23:41:32 +08:00 |
5 Beebird 2019-02-27 00:12:47 +08:00 via Android 信息似乎不够多。可以分别检查 mysql 和 frp 有没有正常启动。docker exec 进入 frp 手动连接 mysql 看是否连上。如果都正常的话,单独停止并删除 frp 再 docker-compose up -d 试试。 |
6 tionsin OP @Beebird 都试过了,现在所有脚本,启动顺序都解决了..剩下一个 spring boot 的 appcation.yml 配置错了,连不上.我还在找 bug....orz |
7 Junn 2019-02-27 00:45:25 +08:00 via iPhone 手动起,确定不是连接问题? |
9 tionsin OP |
10 precisi0nux 2019-02-27 04:03:35 +08:00 via iPhone @tionsin 可以分享一下最后的解决办法吗? |
11 tionsin OP @precisi0nux 就是拥抱官方文档啊 |
12 hzwjz 2019-02-27 08:59:36 +08:00 via Android 连接 MySQL 之前,写个检测 MySQL 的 entrypoint 脚本, |
14 indiemaple 2019-02-27 09:23:55 +08:00 @tionsin 说一下具体方法嘛 |
15 thisisgpy 2019-02-27 09:28:41 +08:00 depends_on 只是确保 frp 容器在 mysql 容器 run 起来之后启动,并不会保证 mysql 容器里面的服务启动完成。 |
16 tionsin OP @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 |