こんにちは。たなか(@tanaka_ricecake)です。
Ruby on RailsでWebアプリケーションサービスの開発をしています。
開発中以下のようなエラーに遭遇したので、内容と解決方法をご紹介します。
もくじ
Address already in use – bind(2) for “0.0.0.0” port 3000 でサーバーが起動しない!
rails s時にエラーメッセージ
rails sでwebサーバー起動の際、以下のようなエラーメッセージが表示されました。
/usr/local/bundle/gems/puma-3.12.1/lib/puma/binder.rb:273:in `initialize': Address already in use - bind(2) for "0.0.0.0" port 3000 (Errno::EADDRINUSE)
Address already in use – bind でサーバーが起動しない! 解決方法
同じポートを使っているプロセスを確認する!
エラーメッセージを見ると、既にport番号3000番のプロセスが立ち上がっているよと言っているようでした。
lsofコマンドでポート3000番がいるか確認できます。
ちなみにlsofは「list open files」の略で、Port番号などを利用して開いているファイルの情報を表示するコマンドです。
$ lsof -i:3000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
com.docke 1534 xxx 25u IPv4 0xe99140d7a247xxxx 0t0 TCP *:hbci (LISTEN)
com.docke 1534 xxx 26u IPv6 0xe99140d78bc7xxxx 0t0 TCP localhost:hbci (LISTEN)
やはり3000番ポートを使っているプロセスがあるようでした。
killコマンドを使って黙らせていきます。
$ kill -9 1534
再びlsofコマンドで確認すると、プロセスを停止できたことを確認できました。
再びコンテナにログインしつつrails sを叩くと……
# rails s -b 0.0.0.0
=> Booting Puma
=> Rails 5.2.3 application starting in development
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.12.1 (ruby 2.6.3-p62), codename: Llamas in Pajamas
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://0.0.0.0:3000
Use Ctrl-C to stop/* Your code... */
無事にサーバーが起動しました!いぇい!
Address already in use – bind(2) for “0.0.0.0” port 3000 でサーバーが起動しない! まとめ
ということで今回はAddress already in use – bind(2) for “0.0.0.0” port 3000 でサーバーが起動しないときの解消方法についてご紹介しました。
Railsを触り初めて1年半くらいですが、まだまだ余裕でこういうの躓きますね。
とはいえエラーメッセージから内容を読み取り、被疑箇所を炙り出すスピードはどんどん早くなってきています。
こうやってブログにしたためてノウハウを溜め込み、ちょっとずつRailsつよつよエンジニアになれるよう頑張ります。
今回はここまで。