condition在3.0-3.8版本中被删除了撰写规范,但现在又回来了!使用撰写规范v3.9的版本,您可以将condition作为中的一个选项。
我使用docker组合启动MySQL和JavaWeb项目,JavaWeb的启动需要依赖MySQL来创建完整的数据,所以我使用了健康检查
但是mysql的healthcheck有一个问题,这是我的docker-compose
# docker-compose.yml
version: "3.9"
services:
mysql:
build:
context: ./mysql
command: [
'mysqld',
'--character-set-server=utf8mb4',
'--collation-server=utf8mb4_unicode_ci',
'--default-time-zone=+8:00',
'--lower-case-table-names=1'
]
ports:
- "3306:3306"
environment:
MYSQL_DATABASE: fuba-db
MYSQL_ROOT_PASSWORD: fb123456
healthcheck:
test: "mysql -uroot -p$$MYSQL_ROOT_PASSWORD -e 'SELECT * FROM factor_header' fuba-db "
interval: 1s
timeout: 3s
retries: 3
redis:
build:
......
nginx:
build:
......
fubaquant:
build:
context: ./webapps
ports:
- "8080:8080"
volumes:
- /mnt/java/jar:/home/ruoyi #jar包
depends_on:
mysql:
condition: service_healthy
redis:
condition: service_started错误的陈述是:
test: "mysql -uroot -p$$MYSQL_ROOT_PASSWORD -e 'SELECT * FROM factor_header' fuba-db "控制台输出:
pro-mysql-1 | 2022-04-07T08:16:54.203710Z 1 [Warning] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.
container for service "mysql" is unhealthy由于fubaquant depends_on mysql健康检查,fubaquant也没有启动。
mysql容器的健康检查日志是:

我检查了mysql的健康检查日志,它也是健康的

谢谢你的帮助
发布于 2022-04-07 06:23:28
我将健康检查配置为只允许3次重试,每隔1秒一次。当compose正在启动java时,mysql服务还没有在3s延迟内达到健康状态,所以compose停止并报告此错误。这是我增加重试次数之后的工作
发布于 2022-04-06 09:24:18
看起来您正在尝试使用错误的用户和密码运行健康检查。你有
healthcheck:
test: ["CMD", "mysqladmin", "-u$mysql", "-p$123456", "ping", "-h", "localhost"]$mysql和$123456将尝试解析这些变量的值。您想要的是使用以下选项。
healthcheck:
test: ["CMD", "mysqladmin", "-u$MYSQL_USER", "-p$MYSQL_PASSWORD", "ping", "-h", "localhost"]然后尝试使用用户mysaqladmin和密码123456运行mysql (这两种方法都被定义为mysql服务的123456)。
https://stackoverflow.com/questions/71762725
复制相似问题