ENTRYPOINTを使って、コンテナ起動前に環境変数等の初期化を試みます
動作確認環境
Docker 27.3.1
Docker コンテナ初回起動時に、環境変数の初期化や特定のスクリプトを実行したい場合は ENTRYPOINT が利用できます
ENTRYPOINT は、コンテナが起動した際に実行されるコマンドを指定するための命令セットです
以下のような単純な Dockerfile を例にします (既存の ubuntu ユーザを利用します)
FROM ubuntu:24.04WORKDIR /home/ubuntuUSER ubuntu
方針としては docker-entrypoint.sh を事前に用意してコピーするようにし、それを実行するようにします
例えば、以下のような docker-entrypoint.sh を用意します
#!/bin/bash# Preprocessing# ここに環境変数の初期化処理や、初期化スクリプトを呼び出したりしますexport MY_HOMEPAGE="FOLKLORE"# Execute# ここで、コンテナ起動時に指定されたコマンドを呼び出しますexec "$@"# ちなみに exec 以降は実行されません
Dockerfile を書き換えます。ENTRYPOINT に、さきほどのシェルスクリプトを指定します
/usr/local/bin/ はパスが通っているので、そこにシェルスクリプトをコピーすることにします
また、実行権限がないと OCI runtime create failed でエラーとなるので、付与もします (事前付与でも可)
FROM ubuntu:24.04WORKDIR /home/ubuntuUSER ubuntuCOPY docker-entrypoint.sh /usr/local/bin/RUN chmod +x /usr/local/bin/docker-entrypoint.shENTRYPOINT ["docker-entrypoint.sh"]
このようにすることで、コンテナ起動時に docker-entrypoint.sh が実行され、初期化処理をすることが可能です 🎉
もちろん if も使えるので、条件に応じて実行するコマンドを変更するような使い方も可能です
おわりに
とあるモジュールで初期化スクリプト実行が必須だったので、最近はそれに使ってます 🐶