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で実行されていました。構成ファイルの変更はありませんでした。
ベースドッカーの画像と関係があるのではないかと疑っていますが、これをドッキングするのに十分なドッカーのスキルはまだありません。
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
でアプリケーションにアクセスできることに注意してください。
。NET Core 2.2以上を使用している場合は、別のイメージを使用する必要があります:mcr.Microsoft.com/dotnet/core/aspnet:2.2。その場合、_ENV ASPNETCORE_URLS=http://+:5000
_を指定しても役に立ちません。 Programs.csファイルでUseUrls("http://*:5000")
を使用することで、アプリにポート5000をリッスンさせることもできます。