os Windows
エラー内容
Error response from daemon: Ports are not available: exposing port TCP 0.0.0.0:3306 -> 0.0.0.0:0: listen tcp 0.0.0.0:3306: bind: Only one usage of each socket address (protocol/network address/port) is normally permitted.
このエラーメッセージは、ポート番号がすでに使用されているため、Dockerがコンテナを起動できないことを示しています。具体的には、MySQLコンテナがポート番号3306を使用しようとしたところ、すでに他のプロセスがこのポート番号を使用しているため、Dockerがコンテナを起動できなかったということです。
原因
正規の手順でコンテナを終了させなかったためにポートが開きっぱなしだったこと。
そもそもポートとは
コンピューターに接続された外部デバイスやネットワークとの通信を行うための仕組みです。ポートは、コンピューターのハードウェアやソフトウェアによって管理され、通信のために特定の番号が割り当てられます。イメージとしては門みたいなもの。
使用されているポートを確認する
Get-NetTCPConnection -State Listen
ポートを閉じる
Stop-Process -Id (Get-NetTCPConnection -LocalPort <ポート番号> -State Listen).OwningProcess -Force
おわりに
ポートはpcをシャットダウンすることでも閉じる。また、ポートの開きっぱなしはセキュリティ上よくない。ポートが開いている状態であれば、外部からの攻撃や不正アクセスのリスクがある。自分はあまりpcをシャットダウンしないので気を付けようと思った。