概要
Dockerコンテナに自動でNextJSサーバーを立ち上げるdocker-compose.ymlを作成した.
NextJSサーバーを再起動したいと思ったとき,Dockerコンテナごと再起動するのは非効率だと思ったので,コンテナ内の操作で対応しようと思った.
今まで使用してなかったコマンドが多いのでメモとして残す.
結論としては,起動コマンドをプロセス1で使用していると終了できないので,別の方法を考える必要がある.(サブプロセスとしてnpm run devを実行するとか,方法はありそう.)
対象者 : ある程度DockerとNextJSがわかる人向け(あと個人的なメモ)
Dockerコンテナ立ち上げ設定
# docker-compose.yml
version: '3'
services:
react:
container_name: nextjs
image: node:18
volumes:
- ../app:/app
working_dir: /app
command: bash -c "sleep 10 && npm run dev"
ports:
- "3000:3000"
tty: true
environment:
- CHOKIDAR_USEPOLLING=true
色々説明を省くとこんな感じ.
上記を下記のコマンドでコンテナ作成する.
docker-compose -f docker-compose.yml up -d
下記の部分でサーバーを起動しているが,止めるためにはdockerの再起動が必要.
command: bash -c "sleep 10 && npm run dev"
再起動コマンド
docker restart nextjs
これでも困らないが,NextJSのプロセスだけ再起動したい.
NextJSサーバーのプロセス停止と再起動
プロセスを停止するにはプロセスIDが必要
ps aux
コマンドを用いて,コンテナで実行されているプロセスの一覧を表示する.
kill -9 PID
でプロセスを終了することができるらしいが...
kill -9 1
をしても終了しない.
調べたところ,プロセスIDが"1"のものに関しては,メインプロセスというらしく,止めることはできないようだ.
command: bash -c "sleep 10 && npm run dev"
で実行されるプロセスがPID="1"となると思われるので,他の方法でnpm run devを実行すれば,動的に再起動できるかもしれない.
結論,コンテナを再起動しよう.(本末転倒)
現状起動に時間がかかるコンテナでもないので,コンテナごと再起動することとした.