
特定のドッカーイメージ(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]
。結果がわからない? - このアプローチは、意図しない結果を引き起こしますか?