[英]Docker Healthcheck AND Operator
我想对执行 curl 命令的容器进行健康检查,并检查环境变量是否等于某个值。 只有当两者都以 0 退出时,该容器的健康状况才应该是健康的。
我真的不知道如何在两个命令的退出代码上基本上使用 AND 运算符。
有什么建议么?
对于复杂的健康检查验证,您可以使用脚本
测试:'bash /tmp/healthcheck.sh'
docker-compose.yml
version: '3.7'
services:
rosariosis_db:
image: mysql:5.7
container_name: rosariosis_db
ports:
- "3306:3306"
volumes:
- ./healthcheck.sh:/tmp/healthcheck.sh
environment:
MYSQL_ROOT_PASSWORD: changeme
MYSQL_USER: rosariosis_user
MYSQL_PASSWORD: changeme
MYSQL_DATABASE: rosariosis
healthcheck:
test: 'bash /tmp/healthcheck.sh'
timeout: 5s
retries: 1
健康检查.sh
#!/bin/bash
exit 0;
您可以放置任何逻辑,只要确保成功返回exit 0
,出错返回exit 1
#!/bin/bash
# https://superuser.com/a/442395
http_validation=$(curl -s -o /dev/null -w "%{http_code}" http://www.example.org)
if [[ $http_validation == 200 && $foo == "foo" ]]
then
exit 0
else
exit 1
fi
据此,您可以在健康检查中使用复杂的条件:
test: ["CMD-SHELL", "if [ \"`echo \\\"SELECT ACCOUNT_STATUS FROM DBA_USERS WHERE USERNAME = 'ANONYMOUS' AND ACCOUNT_STATUS = 'EXPIRED';\\\"|/u01/app/oracle/product/12.1.0/xe/bin/sqlplus -S sys/oracle as sysdba|grep ACCOUNT_STATUS`\" = \"ACCOUNT_STATUS\" ];then true;else false;fi"]
如果docker健康检查支持$?
我们可以使用
mysqladmin ping -h localhost ; echo $? > /tmp/exit_1 ; mysqladmin ping -h localhost ; echo $? > /tmp/exit_2; [[ $(cat /tmp/exit_1) == 0 && $(cat /tmp/exit_2) == 0 ]]
基本上我将退出状态存储在一个文件中,然后比较这些值。
但由于 docker 不支持,我得到了这个错误:
Error: No such container: rosariosis_db
ERROR: Invalid interpolation format for "healthcheck" option in service "rosariosis_db": "mysqladmin ping -h localhost ; echo "$?""
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.