# Docker port error で起動できない

Docker コンテナ起動で already in use エラーで web コンテナが起動できません。

エラー内容

Error response from daemon: driver failed programming external connectivity on endpoint web-1 (cceb24cf2e7caecc53649d51f5d74888baffdb5241592c6f1d356cb13ddb80bf): Error starting userland proxy: listen tcp4 0.0.0.0:80: bind: address already in use

# Ubuntu でポートプロセス特定とポート解放

ポートを使用しているプロセスを確認: まず、ポート 80 を使用しているプロセスを特定しましょう。ターミナルで以下のコマンドを実行して、ポート 80 を使用しているプロセスを表示します。

sudo lsof -i :80

上記コマンドは、ポート 80 を使用しているプロセスの詳細を表示します。プロセス ID(PID)などの情報を確認します。

ポートを解放する: 別のプロセスがポート 80 を使用している場合、それを停止してポートを解放する必要があります。ポートを使用しているプロセスを停止するために、以下のコマンドを使用します。ここで<PID>は、上記で確認したプロセス ID です。

sudo kill -9 <PID>

注意: kill -9 は強制終了のコマンドです。プロセスが正常に終了しない場合に使用しますが、注意して使用してください。

Docker コンテナを再起動: ポート 80 を解放した後、Docker コンテナを再起動してみてください。

別のポートを使用する: もしそのポートが他のアプリケーションで重要な場合、Docker コンテナに割り当てるポートを変更することも検討できます。例えば、コンテナのポートを 8080 に変更してみるなど。

ポートを使用しているプロセスを特定し、必要ならば停止することで、Docker コンテナがポートをバインドできるようになるはずです。

$ sudo lsof -i :80
COMMAND PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
apache2 294     root    4u  IPv6  23972      0t0  TCP *:http (LISTEN)
apache2 304 www-data    4u  IPv6  23972      0t0  TCP *:http (LISTEN)
apache2 305 www-data    4u  IPv6  23972      0t0  TCP *:http (LISTEN)
apache2 306 www-data    4u  IPv6  23972      0t0  TCP *:http (LISTEN)
apache2 307 www-data    4u  IPv6  23972      0t0  TCP *:http (LISTEN)
apache2 308 www-data    4u  IPv6  23972      0t0  TCP *:http (LISTEN)

Apache がポート 80 を使用していることが分かります。Apache を削除する手順を以下に示します。

Ubuntu で Apache を削除するには、次のコマンドを使用します。

Apache サービスを停止します。

sudo service apache2 stop

Apache パッケージをアンインストールします。

sudo apt-get purge apache2 apache2-utils apache2.2-bin apache2-common

設定ファイルや関連ファイルも削除します。

sudo apt-get autoremove
sudo rm -rf /etc/apache2

これにより、Apache 関連のファイルや設定がシステムから削除されます。ただし、この操作はシステム上の Apache 関連の設定やデータをすべて削除するため、注意が必要です。

削除が完了したら、ポート 80 が解放され、Docker コンテナなど他のアプリケーションがそのポートを使用できるようになるでしょう。必要に応じて他の Web サーバーソフトウェアを使用するか、ポートを変更して Apache を再インストールすることもできます。

# Docker コンテナのポートを変更

Apache Web サーバーがポート 80 を使用しているため、Docker コンテナのポートを変更して別のポートにバインドすることができます。
例えば、コンテナのポートを 8080 に変更する場合は、以下のようにコンテナを実行します。

docker run -p 8080:80 <イメージ名>

これにより、コンテナのアプリケーションがホストのポート 8080 にアクセスできるようになります。

2023-08-29
  • docker