繁体   English   中英

Docker 健康检查和操作员

[英]Docker Healthcheck AND Operator

我想对执行 curl 命令的容器进行健康检查,并检查环境变量是否等于某个值。 只有当两者都以 0 退出时,该容器的健康状况才应该是健康的。

我真的不知道如何在两个命令的退出代码上基本上使用 AND 运算符。

有什么建议么?

bash 脚本

对于复杂的健康检查验证,您可以使用脚本

测试:'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 不支持 $?

如果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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM