2017-08-31 5 views
0

oracle dbに対する自動テストではsath89/oracle-12cを使用しています。 これはうまくいきますが、唯一の問題は、このコンテナが起動するまでに数分かかることです(ハードウェアによっては〜10-15)。 私はこのコンテナのヘルスチェックを考えました。bashコマンドをdocker(-compose)に設定する方法healthcheck

私はANONYMOUSアカウントが画像のentrypointスクリプトの最後のステップである、ロックが解除されたときに0を返す

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 

を思い付くことをどうにか:entrypoint.sh。 私はdocker exec -it <containername> bashを使ってこれをテストしました。

私は今、ドッキングウィンドウのためのヘルス・チェック・コマンドに(ドッカ-COMPOSEを)この恐ろしく長い行を変換して立ち往生しています:

すべてのヘルプは高く評価され
version: "2" 
services: 
    db: 
    image: sath89/oracle-12c:r1 
    healthcheck: 
     test: ["CMD", "<command goes here>"] 
     interval: 10s 
     timeout: 3s 
     retries: 3 

- あなたはコマンド自体を向上させることができれば、私は幸せですよここに。 Oracle(source)の検証クエリとして「select one from dual」を認識していますが、これは〜8分後に操作可能なDBを報告しますが、少し後に接続をリセットします。 私はコンテナ自体を変更したくないです - もしアップデートがあれば、それをハブから引き出したいだけです。

+0

なぜコマンドをbashスクリプトに入れてイメージに追加しないのですか?あなたの質問に応じて、[docu](https://docs.docker.com/engine/reference/builder/#healthcheck)によると、コマンドは 'exec'で実行されるので、' bash'とスクリプトに 'test:[" CMD "、" bash "、" -c "、" "]'というスクリプトを付けてください。 – fzgregor

+0

'/ bin/sh'を使っているにもかかわらず、' docker-compose'にシェルを起動させることができたことが分かりました: 'test:[" CMD-SHELL "、" fzgregor

+0

@fzgregor再び "CMD-SHELL"へのヒントをありがとう。私は自分自身を見つけたが、何とかそれを無視した。私はもう一度試してみて、それが有望に見える、実際に動作する場合、答えを投稿します。 – Martin

答えて

1

さて、かなりの時間が経過した後、私は自分の問題の解決策を考え出しました。リトライ(および間隔)の数が非常に高くなければならないので、コンテナではありませんので、ドッキングウィンドウ・コン「start_periodオプションをサポートしていません:私は「」

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 

は今ビット」簡素化することができ「不健康」と報告されている。 Pull Requestは既にマージされていますので、次のリリースになることを願っています。

関連する問題