[Laravel]php artisan serve実行時にエラー「アクセス許可で禁じられた方法でソケットにアクセスしようとしました」が出るとき

カテゴリ: Laravel

PHPフレームワークのLaravelをWindows環境で使っていて、php artisan serveコマンドを実行すると下記のエラーが出て起動できなかったので、確認&対処した結果を書いておきます。

出力されたエラー

php artisan serveコマンドで起動させようとしたところ、下記のようにエラーが出力し起動できませんでした。

> php artisan serve
Laravel development server started:<http://127.0.0.1:8000>
[Thu Feb 22 10:16:59 2018] Failed to listen on 127.0.0.1:8000 
(reason: アクセス許可で禁じられた方法でソケットにアクセスしようとしました。)

このエラーは、該当のポートが別のプログラムによって使用されていた時に出力されます。(上記の例では8000番ポートが使用されています)

8000番ポートを使っているプロセスを確認する

問題の8000番ポートが誰に使われているかは、netstat -anoコマンドで確認できます。

netstatコマンドで指定する-a -n -oオプションの意味はそれぞれ以下の通りです。

> netstat /?
  ...
  -a            すべての接続とリッスン ポートを表示します。
  -n            アドレスとポート番号を数値形式で表示します。
  -o            各接続に関連付けられたそれらを所有するプロセス ID を表示します。

コマンドを実行すると、下記のように8000番ポートはPID4のプロセスで使用されていることが分かりました。

$ netstat -ano

アクティブな接続

  プロトコル  ローカル アドレス      外部アドレス           状態            PID
  ...
  TCP         0.0.0.0:8000           0.0.0.0:0              LISTENING       4
  TCP         [::]:8000              [::]:0                 LISTENING       4

PID=4のプロセスを確認する

実行しているプロセスの一覧はtasklistコマンドで確認できます。
今回はPID=4のプロセスが知りたいので、tasklist /fi "PID eq 4"のコマンドを実行します。

$ tasklist /fi "PID eq 4"

イメージ名                     PID セッション名     セッション# メモリ使用量
========================= ======== ================ =========== ============
System                           4 Services                   0      3,504 K

プロセス名がSystemという事で、これ以上詳しいことは分からず...

ブラウザから8000ポートにアクセスしてみる

方針転換して、ブラウザからhttp://localhost:8000/にアクセスしてみます。

Response Headerを見てみたら、犯人は"Microsoft-HTTPAPI/2.0"のようです。

HTTP/1.1 404 Not Found
Content-Type: text/html; charset=us-ascii
Server: Microsoft-HTTPAPI/2.0
Date: Thu, 22 Feb 2018 09:01:55 GMT
Connection: close
Content-Length: 315

PCのサービス一覧をチェックしてもIISは起動しておらず、他にSkypeなども停止してみたものの問題は解決されず...

システムのプロセスが8000番を使っているところまで分かったのですが、ここから先が解決できなかったため、Laravel側のポートを変更する方向に方針を転換しました。

ポート番号を変更してphp artisan serveを実行

php artisan serveのヘルプを見ると--portオプションでリッスンするポートを変更できることが分かりました。
$ php artisan serve -h
Usage:
serve [options]

Options:
--host[=HOST] The host address to serve the application on. [default: "127.0.0.1"]
--port[=PORT] The port to serve the application on. [default: 8000]
-h, --help Display this help message
-q, --quiet Do not output any message
-V, --version Display this application version
--ansi Force ANSI output
--no-ansi Disable ANSI output
-n, --no-interaction Do not ask any interactive question
--env[=ENV] The environment the command should run under
-v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug

Help:
Serve the application on the PHP development server

というわけで、以下のように--port=8080のように指定すると、8080ポートで起動しました。
$ php artisan serve --port=8080
Laravel development server started: http://127.0.0.1:8080

ブラウザで、http://127.0.0.1:8080にアクセスすると、以下のように無事出力されました。

こちらもおススメ

コメントを残す

メールアドレスが公開されることはありません。