1. ホーム
  2. asp.net

[解決済み] Dockerからaspnet coreが80番ポートで起動するのはなぜですか?

2022-11-04 02:34:09

質問

TL;DRです。 なぜ aspnet コアアプリは、Docker イメージの中からポート 80 で実行されますが、Docker イメージの外からは 5000 で実行されるのでしょうか。

詳しく

私はここにあるaspnet core / dockerのチュートリアルを見てみました。 https://docs.microsoft.com/en-us/dotnet/core/docker/building-net-docker-images

ページの途中から、規定通りに以下のようにアプリケーションを起動します。

dotnet run

とりわけ、これはこれを印刷する。

Now Listening on: http://localhost:5000

素晴らしい。期待通りです。チュートリアルの次は、Dockerイメージの中から全く同じアプリケーションを起動させるというものです。

docker build -t aspnetapp .
docker run -it --rm -p 5000:80 --name aspnetcore_sample aspnetapp

この結果

Now listening on: http://[::]:80

待てよ。ワット? なぜ aspnet コアアプリはポート 80 で動作しているのでしょうか? 私がマシンから直接それを実行したとき、それはポート5000で実行されていました。設定ファイルの変更はありませんでした。

ベースとなるdockerイメージと関係があるのではないかと思っていますが、これを追跡できるほどdockerのスキルはまだありません。

どうすれば解決するのでしょうか?

この microsoft/aspnetcore-build コンテナの上に構築されます。 microsoft/aspnetcore コンテナの上に構築されます。そのため の dockerhub ページを参照してください。 にはこう書かれています。

ポートに関するメモ

この画像は、ASPNETCORE_URLS 環境変数を http://+:80 これは、たとえば Program.cs の app.UseUrl によってアプリケーションに明示的に URL を設定していない場合、アプリケーションはコンテナ内のポート 80 で待ち受けることを意味します。

つまり、これはコンテナが積極的にポートを80に設定しているのです。必要であれば、これを上書きすることができます。 Dockerfile :

env aspnetcore_urls= http://+:5000

また、使用している docker コマンドのために、アプリケーションにアクセスするために、まだ http://localhost:5000 にアクセスすることができます。