基本プロセスの開始後に実行するスクリプトをドッカーコンテナに含める

基本プロセスの開始後に実行するスクリプトをドッカーコンテナに含める

特定のドッカーイメージ(alpineベース)に対していくつかのカスタムコードを実行したいと思います。後ろにコンテナが起動します。コードをコンテナに入れて使いやすく、すべてが独立して欲しいです。通常、コンテナのエントリポイントまたはコマンドをオーバーライドしますが、この場合は不可能です。

私の解決策:

docker-compose.yml

volumes:
  - ./entrypoint-custom.sh:/entrypoint-custom.sh:ro
entrypoint: /entrypoint-custom.sh      # override Dockerfile default of '/someapp'

entrypoint-custom.sh

#!/bin/sh

# custom pre-start code
# ...

# custom post-start code
(sleep 10; echo I run after start) & \
  exec /someapp "$@"                     # '/someapp' is container's actual executable, from image's original ENTRYPOINT

これはうまくいきます。そして、execスーダン信号(ログの回転など)を使用すると、/someapp実行可能ファイルに正しく送信されます。コンテナのログ(docker logs someapp)を確認すると、アプリケーションは通常どおり起動され、しばらくすると遅延したジョブが出力に印刷されることが示されます。

理論的には、echoこれを私が望むリリース後のロジックに置き換えることができます。

心配:

  • コンテナを実行して実行してもps表示されます12 root 0:00 [entrypoint-cust]。結果がわからない?
  • このアプローチは、意図しない結果を引き起こしますか?

ベストアンサー1

おすすめ記事