LoginSignup
4
2

More than 1 year has passed since last update.

操作環境

OS:Windows10
使用ターミナル:WindowsPowerShell、コマンドプロンプト
環境構築ソフト:Docker

課題

 ある朝、いつものようにDockerでコンテナを立ち上げてPHPファイルを実行しようとしたところ、コンテナは立ち上がっているものの、PHP実行用のコンテナが起動していません。

 デーモンさん(サーバー側で、クライアントからの要求に応じるために常駐している門番のようなプログラムのこと)からは、「50080のポートにアクセスしようとしましたが、上手くいきませんでした」と言われている様子。

220112 docker05.png

 $ docker-compose ps、 docker-compose logs コンテナ名 でコンテナの状況を確認しても、「STATUS: created」とあるものの、やはり起動はしていない。(起動していたら「running」となります。)
 Dockerのアプリの画面から起動ボタンを押しても、「ポート番号80が使われています。」という趣旨のエラーが画面上部に表示され、イメージを起動できません。

220112 docker01.png

解決手順

 まず、ポート番号80をどのアプリケーションが使用しているのか調べるために、コマンドプロンプトで、$ netstat -nao と入力し、実行します。

 すると、次のように、ローカルアドレスや外部アドレス、状態や使用されているプロトコル(ネット上の通信の際の決まり事のようなもの)の一覧が表示されます。(-naoのnは「IPアドレスとポート番号を数字で表示」、aは「LISTENING状態にあるTCPポートも表示」、oは「プロセス状態を表示」という意味のコマンドです。)

220112 docker02.png

 ポート番号は外部アドレスの一番最後の部分で表されるので、末尾が80のものを探すと、...ありました!!
220112 docker03.png
 ここに表示されているPID(プロセスID)から、このポート番号80を使用しているアプリケーションを調べます。

 タスクバーにあるWindowsマークを右クリック→タスクマネージャー→詳細 で、アプリケーションの名前やPIDなどが載っている一覧が表示されます。この中から、先ほど調べたPID0のアプリケーションを探します。

 すると、Pythonの標準機能として搭載されている、IDLEがどうやらポート番号80と通信していることが分かりました。
220112 docker04.png
 さて、次は、IDLEで行われている通信を切断!!...としたいところだったのですが、試しに先ほどのDockerのコンテナを起動しようとしたら起動できました。もしかしたら最初は何らかしらの通信がIDLEの方で行われていたものの、そのプロセスが数分間のうちに終了したのかもしれませんね。ちなみにSystem Idle Processの状態は今も「実行中」のままです。何はともあれ、とりあえず一件落着でめでたしめでたし。

総論

 ということで、今回は途中で解決してしまったため、使用されているポートの確認まででしたが、インターネットの勉強で出てきていたデーモン、ポート、プロトコルなどが実際にどのように使われているのか確認でき、良い経験になりました。

 今後もポートの重複などでトラブルが発生した時は、この手順で状態を確認することができそうです。

 それではまた次回の記事までごきげんよう!!

参考

独学エンジニア(実際の内容は有料会員のみ見れます。)
https://dokugaku-engineer.com/

4
2
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
4
2