Docker使用中にポート番号重複エラーが起こる
独学エンジニアという教材を使用しプログラミングの学習をはじめたところです。
環境構築でエラーがたくさん出たので書き残していこうと思います。
開発環境
Docker Desktop for Windows v4.19.0
Windows11 Home
エラー内容
docker compose up -d
を実行するとエラーが起こります。
[+] Running 2/3
✔ Network part2_default Created 0.0s
✔ Container part2-db-1 Started 0.7s
- Container part2-app-1 Starting 0.7s
Error response from daemon: Ports are not available:
exposing port TCP 0.0.0.0:50080 -> 0.0.0.0:0: listen tcp 0.0.0.0:50080: bind:
An attempt was made to access a socket in a way forbidden by its access permissions.
このエラーは、すでに別のサービスやプロセスが指定されたポートを占有している場合に出てくるそうです。
調べよう
Google検索で出てきたコマンドをいろいろ試してみます。
ポート(50080)を使用しているのプロセスのIDを調べる
Get-Process -Id (Get-NetTCPConnection -LocalPort 50080).OwningProcess
→エラーが返ってきました。
ポート50080を占有しているプロセスを特定することができませんでした。
netstat -ano | findstr :50080
→何も返ってきません。
ポート50080への接続をテストする
Test-NetConnection -Port 50080
→エラーが返ってきました。
ポート50080への接続を試みますが、接続失敗。
調べた結果
すでに使用しているプロセス等はなさそうでした。
対処①効果あり - ホストネットワークサービスの再起動
1. まずDockerのコンテナを停止します。
docker compose down
2. ホストネットワークサービスを再起動します。
net stop hns
3. あらためてDockerコンテナを作成します。
docker compose build
docker compose up -d
→今回はこれで無事コンテナを作成することができました。
参考サイト
対処②効果なし - ポート番号の変更
効果のなかった方法も下記に記しておきます。
1. Dockerのコンテナを停止します。
docker-compose down
2. docker-compose.ymlを開き、ports: - "50080:80"
を変更
version: "3"
services:
app:
build:
context: .
dockerfile: docker/app/Dockerfile
ports:
- "50081:80" #50080→50081に変更
volumes:
- ./src:/var/www/html
depends_on:
- db
db:
image: mysql/mysql-server:5.5.62
ports:
- "53306:3306"
volumes:
- ./docker/db/my.cnf:/etc/mysql/conf.d/my.cnf
- ./docker/db/mysql_data:/var/lib/mysql
env_file:
- ./docker/db/db-variables.env
3. 再起動します
→エラーは解消していませんでした。
終わりに
エラーは解消されましたが、パソコンを起動させるたびにエラーが出るので手間がかかっています。ほかに解決策が見つかったら更新します。