前提
・Dockerで環境構築をしている
・Rails 6.1.5
エラーの内容
`initialize': Address already in use - bind(2) for "0.0.0.0" port 3000 (Errno::EADDRINUSE)
原因
既に3000Portが使われているため同じポート番号は使えないよというエラー
解決策
3000Portを使用しているプロセスを終了する
①3000Portを使用しているプロセスの番号を調べる
# 現在、実行しているプロセスを表示するコマンド
$ ps -x
PID TTY STAT TIME COMMAND
1 pts/0 Ss+ 0:00 irb
8 pts/1 Ss+ 0:00 /bin/bash
15 pts/2 Ss+ 0:00 /bin/bash
32 pts/1 Z+ 0:00 [ruby] <defunct>
64 pts/3 Ss+ 0:00 /bin/bash
919 pts/4 Ss 0:00 /bin/bash
1559 pts/1 Sl+ 0:00 spring server | rails-app | started 72 hours ago
2288 pts/4 Sl+ 0:20 puma 5.6.2 (tcp://0.0.0.0:3000) [rails-app]
2689 ? Ssl 13:18 spring app | rails-app | started 45 hours ago | test mode
2690 ? Ssl 13:19 spring app | rails-app | started 45 hours ago | development mode
2728 pts/5 Ss 0:00 /bin/bash
3115 pts/5 R+ 0:00 ps -x
後から気づいたがプロセス多いと探すの大変だからgrepで検索する方が良さそう
$ ps -x | grep 0.0.0.0:3000
2288 pts/4 Sl+ 0:01 puma 3.12.6 (tcp://0.0.0.0:3000) [rails_app]
3168 pts/5 S+ 0:00 grep 0.0.0.0:3000
②killコマンドでプロセスを終了する
# killコマンドにはPIDの番号を渡す
$ kill 2288
もう一度ps -xで確認するとプロセスが消えているはずだが、消えていなければ下記のコマンドで強制終了する
#-9オプションで強制終了
$ kill -9 2288
プロセスが終了していることを確認したらrails sすれば起動できるはず。