1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Dockerコンテナ内のNextJSの再起動に関して

Posted at

概要

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

こんな感じで動いている.
image.png

下記の部分でサーバーを起動しているが,止めるためにはdockerの再起動が必要.

command: bash -c "sleep 10 && npm run dev"

再起動コマンド

docker restart nextjs

これでも困らないが,NextJSのプロセスだけ再起動したい.

NextJSサーバーのプロセス停止と再起動

プロセスを停止するにはプロセスIDが必要
ps auxコマンドを用いて,コンテナで実行されているプロセスの一覧を表示する.
image.png

kill -9 PIDでプロセスを終了することができるらしいが...
kill -9 1をしても終了しない.
image.png

調べたところ,プロセスIDが"1"のものに関しては,メインプロセスというらしく,止めることはできないようだ.

command: bash -c "sleep 10 && npm run dev"

で実行されるプロセスがPID="1"となると思われるので,他の方法でnpm run devを実行すれば,動的に再起動できるかもしれない.

結論,コンテナを再起動しよう.(本末転倒)

現状起動に時間がかかるコンテナでもないので,コンテナごと再起動することとした.

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?