bash
  • oracle
  • docker
  • docker-compose
  • health-monitoring
  • 2017-08-31 45 views 0 likes 
    0

    我正在使用sath89/oracle-12c進行鍼對oracle數據庫的自動化測試。 這工作正常,唯一的問題是,這個容器需要幾分鐘才能開始(〜10-15取決於硬件)。 我試圖想出一個健康檢查這個容器。如何將bash命令轉換爲docker(-compose)healthcheck

    我設法拿出

    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帳戶被解鎖,這是在圖像的entrypoint腳本中的最後一步,它返回0:entrypoint.sh。 我使用docker exec -it <containername> bash測試了這個。

    我現在仍堅持這一可怕的長線轉變成健康檢查命令泊塢窗(泊塢窗-撰寫):

    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分鐘後的運行數據庫,但稍後會重置連接。 我不想修改容器本身 - 如果有更新,我只想將它從集線器中拉出來。

    +0

    爲什麼不把命令放到bash腳本中並將它添加到圖像中?根據你的問題,根據[docu](https://docs.docker.com/engine/reference/builder/#healthcheck),命令是通過'exec'執行的,因此你必須調用'bash'並且給它你的腳本:'test:[「CMD」,「bash」,「-c」,「<可怕的長腳本>」]'。 – fzgregor

    +0

    我剛剛意識到你也可以讓'docker-compose'完成調用shell的工作,儘管它使用'/ bin/sh':'test:[「CMD-SHELL」,「」]'' – fzgregor

    +0

    @fzgregor再次感謝提示「CMD-SHELL」。我自己絆倒了它,但不知何故忽略它。我給了它另一次嘗試,它看起來很有希望,如果它真的有效,會發佈一個答案。 – Martin

    回答

    1

    好的,經過一段時間,我已經爲我的問題提出了一個解決方案。我可以簡化「」有點:

    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 
    

    眼下「泊塢窗,撰寫」不支持start_period選項,這樣重的數量(和間隔)必須相當高,所以容器不報告爲「不健康」。 Pull Request已經合併,所以希望它會在下一個版本。

    相關問題