Windows11 で Docker 環境構築中に TCP Port 9001 が利用できないエラーが発生した時の解決方法

# 結論
別のポートを利用することで解決しました。

# 背景
以下の docker-compose.yml をもとにコンテナを起動しようとしたところエラーが発生したので、解決までにやったことを記載していきます。

```docker-compose.yml
version: "3"
services:

  ps-db-user:
    image: postgres:latest
    environment:
      POSTGRES_USER: root
      POSTGRES_PASSWORD: password
    ports:
      - 5432:5432
    volumes:
      - user_volumes:/var/lib/postgresql
  ps-db-data:
    image: postgres:latest
    environment:
      POSTGRES_USER: root
      POSTGRES_PASSWORD: password
    ports:
      - 5433:5432
    volumes:
      - data_volumes:/var/lib/postgresql
  minio:
    image: minio/minio:latest
    environment:
      MINIO_ROOT_USER: root
      MINIO_ROOT_PASSWORD: password
    volumes:
      - .minio:/data
    command: server --console-address ":9001" /data
    ports:
      - 9000:9000
      - 9001:9001
volumes:
  user_volumes:
  data_volumes:
```

開発環境は以下の通りです。

- Windows11
- Docker Desktop 4.28.0

# エラー内容
```docker-compose up``` でコンテナを起動しようとしたところ TCP Port 9001 が利用できないというエラーが発生しました。

```powershell
Error response from daemon: Ports are not available: exposing port TCP 0.0.0.0:9001 -> 0.0.0.0:0: listen tcp 0.0.0.0:9001: bind: An attempt was made to access a socket in a way forbidden by its access permissions.
```

# 該当ポートの利用状況を確認
```netstat``` コマンドを利用し、9001 ポートの利用状況を確認しました。

```powershell
netstat -ano | Select-String ":9001"
```

結果は以下の通りです。
一番右側はプロセスID（PID）という OS が実行中のプロセスの識別子が表示されます。
このケースでは、PID 4 が 9001 を利用中ということがわかりました。

```powershell
  TCP    0.0.0.0:9001           0.0.0.0:0              LISTENING       4
  TCP    [::]:9001              [::]:0                 LISTENING       4
```

# 該当プロセスの確認
次は PID 4 が何のプロセスを実行中であるかタスクマネージャーで確認します。
このケースでは、NT Kernel & System を実行中ということがわかりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318188/d0d28583-2283-8d2b-d2a1-4e7852611f16.png)

# ポートの変更
NT Kernel & System を停止するよりも Docker 側で利用するポートを変更するほうが安全なので、```9000``` を ```9100``` へ、```9001``` を ```9101``` へ変更します。

```docker-compose.yml
version: "3"
services:

  ps-db-user:
    image: postgres:latest
    environment:
      POSTGRES_USER: root
      POSTGRES_PASSWORD: password
    ports:
      - 5432:5432
    volumes:
      - user_volumes:/var/lib/postgresql
  ps-db-data:
    image: postgres:latest
    environment:
      POSTGRES_USER: root
      POSTGRES_PASSWORD: password
    ports:
      - 5433:5432
    volumes:
      - data_volumes:/var/lib/postgresql
  minio:
    image: minio/minio:latest
    environment:
      MINIO_ROOT_USER: root
      MINIO_ROOT_PASSWORD: password
    volumes:
      - .minio:/data
    command: server --console-address ":9101" /data
    ports:
      - 9100:9000
      - 9101:9001
volumes:
  user_volumes:
  data_volumes:

```

# 動作確認
```docker-compose up``` でコンテナを起動できることが確認できました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318188/6e649d92-a28c-dc01-a047-7d1672a71930.png)

# 参考
- [DockerがErrorで起動しない(Ports are not available: listen ～An attempt was made to access a socket in a way forbidden by its access permissions.)](https://qiita.com/Quantum/items/8891fa9c94d03b388555)
- [Port 8000, PID 4, not able to kill, taskill /f /pid 4, Access Denied](https://stackoverflow.com/questions/25956531/port-8000-pid-4-not-able-to-kill-taskill-f-pid-4-access-denied)