結論
別のポートを利用することで解決しました。
背景
以下の 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 が利用できないというエラーが発生しました。
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 ポートの利用状況を確認しました。
netstat -ano | Select-String ":9001"
結果は以下の通りです。
一番右側はプロセスID(PID)という OS が実行中のプロセスの識別子が表示されます。
このケースでは、PID 4 が 9001 を利用中ということがわかりました。
TCP 0.0.0.0:9001 0.0.0.0:0 LISTENING 4
TCP [::]:9001 [::]:0 LISTENING 4
該当プロセスの確認
次は PID 4 が何のプロセスを実行中であるかタスクマネージャーで確認します。
このケースでは、NT Kernel & System を実行中ということがわかりました。
ポートの変更
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
でコンテナを起動できることが確認できました。