この記事が役立つかもしれない人
-
npm run dev
などでコンテナ起動時に実行するよう設定しているアプリケーションを停止させたい人 - 特定のポートで動作しているプロセスを停止したい人
- アプリケーションをビルドしてみて手元で正常に実行できるか試したい人
背景
npm run dev
や npm run start
などをコンテナ起動時に叩くように設定していると便利ですよね。
ただ一方でデプロイが上手くいかないときにビルドしたアプリケーションが正常に動作しているのかを確認したくなることがあります。
そこで困りがちな問題が「Ctrl + C
で停止できない!」「どうやって停止するの!?」などです。これを解決する方法について解説します。
方法
ポートを使用しているプロセスを確認して、そいつを停止させます。
手順
1. ポートを使用しているプロセスを確認する
$ lsof -i :8080
lsof: not found
と言われる!
コマンドがインストールされておらず使えない状態です。
数秒で終わるのでインストールしましょう!
$ apt-get update
$ apt-get install lsof
:8080
は Docker Compose で設定している ports
を確認して対応しているポート番号に書き換えてください。
例として下記のように Docker Compose が設定がされている場合は lsof -i :8081
という風になります。
nestjs-app:
build:
context: "./nestjs-app"
init: true
ports:
- "8082:8081"
volumes:
- type: bind
source: ./nestjs-app
target: /nestjs-app
working_dir: /nestjs-app
command: sh -c "npm install && npm run start:dev"
2. プロセスを停止する
lsof を実行すると次のような出力があるはずです。
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
node 208 root 26u IPv6 509013 0t0 TCP *:8080 (LISTEN)
PID がプロセスの ID なので、それを使ってプロセスを停止 (kill) します。
$ kill -9 {PID}
コマンドの解説
lsof
とは?
オープンファイルを一覧表示するコマンドです。
-i
オプションを使用することでネットワークソケットを対象にすることができます。
つまり lsof -i :8080
を実行すると、ポート 8080 で動作しているプロセスの情報が表示されます
kill
とは?
実行中のプロセスを終了させるコマンドです。
-9
オプションは、プロセスに強制終了のシグナル (SIGKILL) を送信します。通常の kill
コマンド (SIGTERM) では終了しないプロセスを停止する際に有効です。
ただし注意点として強制終了によるデータ損失や状態の不整合が発生する可能性もあるため、通常の環境では慎重に使用することをお勧めします。今回のような Docker コンテナ内であれば基本的には問題ありません。
まとめ
これで port を占領しているアプリケーションを停止することができました。
あとは node dist/main
など、ビルドしたアプリケーションの動作を確認するだけです!
この記事が役に立ったら 🩷 を頂けると嬉しいです!