cloudformation テンプレートの docker コンテナーで Java アプリのデプロイを自動化しています。Java クラッシュ ログの環境変数をセットアップする必要がありますが、コンテナーごとに一意のパスを保持する必要があります。docker イメージまたは dockerfile を変更できません。
そのために、十分にユニークな docker コンテナの $HOSTNAME を使用しています。問題は、コンテナーの起動後に設定されるため、通常の docker 環境変数として使用できないことです。これを回避するには、env 変数を設定してエントリポイントを変更し、その後元のエントリポイントを起動します。
EntryPoint:
- /bin/sh
- -c
- export JAVA_OPTS="$JAVA_OPTS -XX:HeapDumpPath=/mnt/crashdumps/java_$HOSTNAME.hprof"
&& ./entrypoint.sh
(AWS::ECS::TaskDefinition 用の cloudformation YAML テンプレートですが、docker cli でも同じことが表現できます)
Java コンテナ プロバイダがエントリポイント シェル スクリプトの配置を変更するまでは問題なく動作していました。ファイルが存在するかどうかを確認する必要があり、さらにメンテナンスが必要なため (つまり、エントリポイントのパスまたはファイル名が再度変更される場合) 、シェル インジェクションはコード内で非常に汚れているように見えます。
次のいずれかのより良い方法はありますか?
- 変更エントリポイントとは異なる方法を使用して、コンテナー名でパスを動的にセットアップします。また
- 「エクスポート」コマンドだけを挿入し、名前とパスが何であれ、元のエントリポイントを実行しますか?