condition在版本 3.0 至 3.8 中已删除 compose 规范,但现在又回来了!使用 compose 规范 v3.9 版本,您可以使用condition作为depends_on长语法形式的选项。
我使用 docker compose 启动 MySQL 和 Java Web 项目, JavaWeb的启动需要依赖MySQL来创建完整的数据,所以我使用healthcheck
但是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 dependents_on mysql healthcheck,fubaquant 也没有启动
mysql容器的健康检查日志为:
我检查了mysql的健康检查日志,它也很健康
感谢您的帮助
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
您似乎正在尝试使用错误的用户和密码运行运行状况检查。你有
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"]然后,这将尝试使用用户
mysql和密码123456运行mysaqladmin(两者都定义为 docker-compose 上mysql服务的环境变量)我将运行状况检查配置为仅允许 3 次重试,间隔 1 秒。当 compose 启动 java 时,mysql 服务在这 3 秒的延迟内尚未达到健康状态,因此 compose 停止并报告此错误。 增加重试次数后就可以了