Mar*_*tin 4 oracle bash health-monitoring docker docker-compose
我正在使用sath89/oracle-12c对 oracle 数据库进行自动测试。这工作正常,唯一的问题是该容器需要几分钟才能启动(大约 10-15 取决于硬件)。我试图为这个容器进行健康检查。
我设法想出
status=`su oracle -c "echo -e \"SELECT ACCOUNT_STATUS FROM DBA_USERS WHERE USERNAME = 'ANONYMOUS' AND ACCOUNT_STATUS = 'EXPIRED';\" | /u01/app/oracle/product/12.1.0/xe/bin/sqlplus -S / as sysdba | grep ACCOUNT_STATUS"`; if [ "$status" == "ACCOUNT_STATUS" ]; then true; else false; fi
Run Code Online (Sandbox Code Playgroud)
ANONYMOUS当帐户解锁时返回 0 ,这是entrypoint图像脚本中的最后一步:entrypoint.sh。我使用测试了这个docker exec -it <containername> bash。
我现在坚持将这个可怕的长行转换为 docker (docker-compose) 的健康检查命令:
version: "2"
services:
db:
image: sath89/oracle-12c:r1
healthcheck:
test: ["CMD", "<command goes here>"]
interval: 10s
timeout: 3s
retries: 3
Run Code Online (Sandbox Code Playgroud)
任何帮助都是值得赞赏的 - 如果您可以改进命令本身,我很高兴在这里。我知道“从双中选择 1”作为 Oracle 的验证查询(来源),但这会在大约 8 分钟后报告可操作的数据库,但稍后会重置连接。我不想修改容器本身 - 如果有更新,我只想能够从集线器中提取它。
好吧,经过相当长的一段时间后,我想出了解决我的问题的方法。我可以稍微简化一下“”:
version: '2.1'
services:
db:
image: sath89/oracle-12c:r1
healthcheck:
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"]
interval: 30s
timeout: 3s
# start_period: 900s
retries: 30
Run Code Online (Sandbox Code Playgroud)
目前“docker-compose”不支持 start_period 选项,因此重试次数(和间隔)必须相当高,这样容器就不会被报告为“不健康”。Pull 请求已经被合并,所以希望它会出现在下一个版本中。
| 归档时间: |
|
| 查看次数: |
6356 次 |
| 最近记录: |