使用 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 2
最好的办法就是利用 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 1
信息似乎不够多。可以分别检查 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 |