我正在使用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分鐘後的運行數據庫,但稍後會重置連接。 我不想修改容器本身 - 如果有更新,我只想將它從集線器中拉出來。
爲什麼不把命令放到bash腳本中並將它添加到圖像中?根據你的問題,根據[docu](https://docs.docker.com/engine/reference/builder/#healthcheck),命令是通過'exec'執行的,因此你必須調用'bash'並且給它你的腳本:'test:[「CMD」,「bash」,「-c」,「<可怕的長腳本>」]'。 – fzgregor
我剛剛意識到你也可以讓'docker-compose'完成調用shell的工作,儘管它使用'/ bin/sh':'test:[「CMD-SHELL」,「」]'' –
fzgregor
@fzgregor再次感謝提示「CMD-SHELL」。我自己絆倒了它,但不知何故忽略它。我給了它另一次嘗試,它看起來很有希望,如果它真的有效,會發佈一個答案。 – Martin