Hotdog は、Log4j Hot Patch をコンテナに挿入するために使用される OCI フックのセットです。
runc がコンテナをセットアップするとき、 hotdog-cc-hook
呼び出します。 hotdog-cc-hook
ホットパッチ ファイルを/dev/shm/.hotdog
にあるコンテナのファイルシステムにバインドマウントします。メインコンテナプロセスが開始すると、 runc はhotdog-poststart-hook
呼び出します。これは、 nsenter
使用してコンテナの名前空間に入り、 hotdog-hotpatch
プロセスをフォークします。 hotdog-hotpatch
、コンテナ内の JVM を検出してホットパッチを適用するために、頻度を減らしながら (現在は 1 秒、5 秒、10 秒、30 秒) 数回実行されます。
hotdog-hotpatch
プロセスの終了後に新しい Java プロセスが開始された場合、それらのプロセスにはホット パッチは適用されません。hotdog-hotpatch
コンテナーの終了後もしばらく残る可能性があります。/dev/shm/.hotdog
に挿入します。 /dev/shm
が存在しない場合 ( --ipc=none
で起動された Docker コンテナの場合など)、ホットドッグはコンテナに挿入されず、ホットパッチも提供されません。 Hotdog は、Bottlerocket 1.5.0 にデフォルトで含まれています。
ユーザー データに次の設定を含めることで、Bottlerocket の新規起動に対してホットパッチを有効にできます。
[ settings . oci-hooks ]
log4j-hotpatch-enabled = true
最新バージョンの Bottlerocket を実行している既存のホストの場合、API クライアントを使用してホットパッチを有効にすることができます。
apiclient set oci-hooks.log4j-hotpatch-enabled=true
実行時に設定を有効にしても、コンテナーの実行には影響しません。新しく起動されたコンテナにはホットパッチが適用されます。
Hotdog をインストールするには、次のファイルを適切な場所にコピーし、適切な構成を設定する必要があります。
Log4jHotPatch.jar
/usr/share/hotdog
にコピーします (ホットパッチをソースからビルドする場合は、 build/libs
にあります)make && sudo make install
実行して、 hotdog-cc-hook
とhotdog-poststart-hook
を/usr/libexec/hotdog
にインストールし、 hotdog-hotpatch
/usr/share/hotdog
にインストールします。oci-add-hooks
インストールする/etc/hotdog/config.json
に書き込んで、hotdog フックを使用してoci-add-hooks
を構成します。 {
"hooks" : {
"prestart" : [{
"path" : " /usr/libexec/hotdog/hotdog-cc-hook "
}],
"poststart" : [{
"path" : " /usr/libexec/hotdog/hotdog-poststart-hook "
}]
}
}
/etc/docker/daemon.json
に書き込んで、フックを使用するように Docker を構成します。 {
"runtimes" : {
"hotdog" : {
"path" : " oci-add-hooks " ,
"runtimeArgs" : [
" --hook-config-path " , " /etc/hotdog/config.json " ,
" --runtime-path " , " /usr/sbin/runc "
]
}
}
}
ホットパッチを有効にしてコンテナーを実行するには、 docker run --runtime hotdog
を指定します。すべてのコンテナーでホットパッチをデフォルトで有効にして実行するには、次の内容を/etc/docker/daemon.json
に追加します。
"default-runtime": "hotdog"
ホットドッグがデフォルトで有効になっている場合でも、 hotdog
をオプトアウトしたい場合は、 --runtime runc
指定します。
hotdog
、各コンテナーの/dev/shm/.hotdog
ディレクトリにいくつかのファイルを追加します。 hotdog-hotpatch
のログは/dev/shm/hotdog.log
にあります。
詳細については、「貢献」を参照してください。
このプロジェクトは、Apache-2.0 ライセンスに基づいてライセンスされています。