【Docker】entrypoint.shの処理後にコンテナがクラッシュする件
1.はじめに
DockerfileのENTRYPOINTで「entrypoint.sh」の処理を実行した後にコンテナがクラッシュしてしまう状態(vscodeのウィンドウ再読み込みとなる状態)に陥りました。
2.ENTRYPOINTコマンドについて
まず、ENTRYPOINTコマンドの用途について簡単に説明します。
Dockerfileに記述された処理は基本的に、docker-compose.ymlで設定したvolumeのマウントの前に実施されます。したがってDockerfileの処理で生成されたファイルとvolumeのマウント対象のファイルが同じ場合、マウントによって上書きされてしまいます。
例:Dockerfileのnpm installで生成されたnode_modulesがマウントにより消える
▼DockerFile
FROM node:18
#・・・・・・・・・・・・・・・・・・・
WORKDIR /app #マウントするフォルダが一致
# 依存関係をインストール(イメージ作成時に実行)
RUN npm install
#・・・・・・・・・・・・・・・・・・・
▼docker-compose.yml
services:
app:
#・・・・・・・・・・・・・・・・・・・
volumes:
- .:/app #マウントするフォルダが一致
#・・・・・・・・・・・・・・・・・・・
マウントしたフォルダ配下で何らかの処理を実行したい場合、ENTRYPOINTはvolumeのマウントが完了した後に実行されるため役に立ちます。
※実行をマウント後に予約するイメージです
3.発生した事象と対策
前置きが長くなりましたが、実際に発生した事象というのがENTRYPOINTで「entrypoint.sh」を実行したところ、コンテナが終了するというものです。
本来であればentrypoint.shに対し、以下のように永続的にプロセスを維持するコマンドを引数として渡す必要があるようです。
▼DockerFile
FROM node:18
#・・・・・・・・・・・・・・・・・・・
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
# 次の処理へ
CMD ["sleep", "infinity"]
#・・・・・・・・・・・・・・・・・・・
参考になれば幸いです!
プロフィール
▲写真はペットのニッキ(チンチラ/げっ歯類)
こんにちは。RYUTOと申します。
医療職を経て、夢見るSE(システムエンジニア)として日々研鑽を積んでいます。
このサイトでは日々邁進する中で、その生きた証(ログ)を備忘録を残しています。
皆さんの参考になれたらうれしいです。