要約:aspnet core アプリが Docker イメージ内ではポート 80 で実行されるのに、Docker イメージ外ではポート 5000 で実行されるのはなぜですか。
精巧な
ここで見つかった aspnet core / docker チュートリアルを実行しました:https://learn.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 core アプリがポート 80 で実行されているのはなぜですか?マシンから直接実行したときは、ポート 5000 で実行されていました。構成ファイルは変更されていません。
これはベースの Docker イメージと関係があるのではないかと疑っていますが、これを追跡できるほどの Docker のスキルがまだありません。
ベストアンサー1
コンテナはコンテナmicrosoft/aspnetcore-build
の上に構築されます microsoft/aspnetcore
。そのためのdockerhubページ言う:
ポートに関する注意
この画像はASPNETCORE_URLS環境変数を次のように設定します。http://+:80つまり、たとえば Program.cs の app.UseUrl を介してアプリケーションで URL を明示的に設定していない場合、アプリケーションはコンテナー内のポート 80 でリッスンすることになります。
これは、コンテナがポートを 80 にアクティブに設定するものです。必要に応じて、次のようにしてこれを上書きできますDockerfile
。
環境変数 ASPNETCORE_URLS=http://+:5000
http://localhost:5000
また、使用している docker コマンドにより、アプリケーションを直接実行している場合でも、コンテナー内で実行している場合でも、アプリケーションにアクセスできることに注意してください。