web-dev-qa-db-ja.com

なぜaspnetコアはDocker内からポート80で起動するのですか?

TL; DR:aspnetコアアプリは、Dockerイメージ内からポート80で実行されますが、Dockerイメージ外では5000です。

詳細

私はここにあるaspnetコア/ドッカーのチュートリアルを試しました: 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

待つ。ワット? asp80コアアプリがポート80で実行されているのはなぜですか?マシンから直接実行したとき、ポート5000で実行されていました。構成ファイルの変更はありませんでした。

ベースドッカーの画像と関係があるのではないかと疑っていますが、これをドッキングするのに十分なドッカーのスキルはまだありません。

27

Microsoft/aspnetcore-buildコンテナは、Microsoft/aspnetcoreコンテナの上に構築されます。 そのためのdockerhubページ はこう言います:

ポートに関する注意

このイメージは、ASPNETCORE_URLS環境変数を http:// +:8 に設定します。つまり、たとえばProgram.csのapp.UseUrlを使用して、アプリケーションで明示的にURLを設定していない場合は、アプリケーションはコンテナ内のポート80でリッスンします。

したがって、これはポートをアクティブに80に設定するコンテナです。必要に応じて、Dockerfileでこれを行うことにより、オーバーライドできます。

ENV ASPNETCORE_URLS = http:// +:50

また、使用しているdockerコマンドにより、アプリケーションを直接実行している場合でもコンテナ内で実行している場合でも、http://localhost:5000でアプリケーションにアクセスできることに注意してください。

49
Omair Majid

。NET Core 2.2以上を使用している場合は、別のイメージを使用する必要があります:mcr.Microsoft.com/dotnet/core/aspnet:2.2。その場合、_ENV ASPNETCORE_URLS=http://+:5000_を指定しても役に立ちません。 Programs.csファイルでUseUrls("http://*:5000")を使用することで、アプリにポート5000をリッスンさせることもできます。

4
Rroman