gpt4 book ai didi

bash - 如何将bash命令转换为docker(-compose)healthcheck

转载 作者:行者123 更新时间:2023-12-02 19:08:12 27 4
gpt4 key购买 nike

我正在使用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

解锁 ANONYMOUS帐户后返回0,这是图像 entrypoint脚本的最后一步: entrypoint.sh
我使用 docker exec -it <containername> bash进行了测试。

我现在坚持将这条冗长的行转换为docker的healthcheck命令(docker-compose):
version: "2"
services:
db:
image: sath89/oracle-12c:r1
healthcheck:
test: ["CMD", "<command goes here>"]
interval: 10s
timeout: 3s
retries: 3

感谢您的帮助-如果您可以改善命令本身,我很高兴在这里。
我知道“从双选中选择1”作为对Oracle的验证查询( source),但这会在大约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

目前,“docker-compose”不支持start_period选项,因此重试次数(和间隔)必须很高,因此不会将容器报告为“不健康”。
Pull Request已经被合并,因此希望它将在下一个版本中。

关于bash - 如何将bash命令转换为docker(-compose)healthcheck,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45982906/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com