簡體   English   中英

如何將bash命令轉換為docker(-compose)healthcheck

[英]how to turn bash command into docker(-compose) healthcheck

我正在使用sath89 / oracle-12c對oracle db進行自動化測試。 這工作正常,唯一的問題是此容器需要幾分鍾的時間才能啟動(大約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的驗證查詢( ),但這會在大約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已被合並,因此希望它將在下一個版本中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM