日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

【Docker】Asp.net core在docker容器中的端口问题

發(fā)布時(shí)間:2023/12/4 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Docker】Asp.net core在docker容器中的端口问题 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

還記得【One by one系列】一步步學(xué)習(xí)docker(三)——實(shí)戰(zhàn)部署dotnetcore中遇到的問(wèn)題么?容器內(nèi)部啟動(dòng)始終是80端口,并不由命令左右。

docker?run?--name?container-name?-p?81:5000?mywebapi

所謂知其然就要知其所以然,淺嘗輒止并不是個(gè)好習(xí)慣,主要是以下幾個(gè)因素共同導(dǎo)致了這種情況。

1.Kestrel配置

ASP.NET Core項(xiàng)目使用Kestrel作為默認(rèn)的web服務(wù)器。

而集成Kestrel的ASP.NET Core有4種方式指定終結(jié)點(diǎn)URL:

  • ASPNETCORE_URLS 環(huán)境變量

  • --urls命令行參數(shù)

  • urls 主機(jī)配置鍵

  • UseUrls擴(kuò)展方法

2.按圖索驥-Dockerfile

2.1 Asp.Net Core Runtime

首先我們按照asp.net core的其中一個(gè)版本構(gòu)建鏡像的Dockerfile

ARG?REPO=mcr.microsoft.com/dotnet/core/runtime FROM?$REPO:3.1-buster-slim#?Install?ASP.NET?Core RUN?aspnetcore_version=3.1.4?\&&?curl?-SL?--output?aspnetcore.tar.gz?https://dotnetcli.azureedge.net/dotnet/aspnetcore/Runtime/$aspnetcore_version/aspnetcore-runtime-$aspnetcore_version-linux-x64.tar.gz?\&&?aspnetcore_sha512='a761fd3652a0bc838c33b2846724d21e82410a5744bd37cbfab96c60327c89ee89c177e480a519b0e0d62ee58ace37e2c2a4b12b517e5eb0af601ad9804e028f'?\&&?echo?"$aspnetcore_sha512??aspnetcore.tar.gz"?|?sha512sum?-c?-?\&&?tar?-ozxf?aspnetcore.tar.gz?-C?/usr/share/dotnet?./shared/Microsoft.AspNetCore.App?\&&?rm?aspnetcore.tar.gz “
  • 基于.net core基礎(chǔ)鏡像

  • 運(yùn)行命令,下載asp.net core指定版本的運(yùn)行時(shí)壓縮包

  • 驗(yàn)證壓縮包正確性

  • 解壓壓縮文件

  • 刪除壓縮文件

2.2 .Net Core Runtime

根據(jù)上面的Dokcerfile,可以看到asp.net core的鏡像是在.net core的基礎(chǔ)上構(gòu)建的,所以繼續(xù)找到.net core的構(gòu)建鏡像的Dockerfile

ARG?REPO=mcr.microsoft.com/dotnet/core/runtime-deps FROM?$REPO:3.1-buster-slimRUN?apt-get?update?\&&?apt-get?install?-y?--no-install-recommends?\curl?\&&?rm?-rf?/var/lib/apt/lists/*#?Install?.NET?Core RUN?dotnet_version=3.1.4?\&&?curl?-SL?--output?dotnet.tar.gz?https://dotnetcli.azureedge.net/dotnet/Runtime/$dotnet_version/dotnet-runtime-$dotnet_version-linux-x64.tar.gz?\&&?dotnet_sha512='1869565558e5a85b6a898e792d7b5dece611b25f7f6fd8f015ffb16dccc7485f1412e04809da2e3f56744d24c75e1d3addbd2856c45ae7e66a2c7b71ea23e827'?\&&?echo?"$dotnet_sha512?dotnet.tar.gz"?|?sha512sum?-c?-?\&&?mkdir?-p?/usr/share/dotnet?\&&?tar?-ozxf?dotnet.tar.gz?-C?/usr/share/dotnet?\&&?rm?dotnet.tar.gz?\&&?ln?-s?/usr/share/dotnet/dotnet?/usr/bin/dotnet

2.3 .NET Core Runtime Dependencies

根據(jù)上面的Dokcerfile,可以看到.net core的鏡像是在runtime-deps的基礎(chǔ)上構(gòu)建的,所以繼續(xù)找到runtime-deps的構(gòu)建鏡像的Dockerfile

FROM?amd64/debian:buster-slimRUN?apt-get?update?\&&?apt-get?install?-y?--no-install-recommends?\ca-certificates?\\ #?.NET?Core?dependencieslibc6?\libgcc1?\libgssapi-krb5-2?\libicu63?\libssl1.1?\libstdc++6?\zlib1g?\&&?rm?-rf?/var/lib/apt/lists/*#?Configure?web?servers?to?bind?to?port?80?when?present?? #?這就是真相 ENV?ASPNETCORE_URLS=http://+:80?\#?Enable?detection?of?running?in?a?containerDOTNET_RUNNING_IN_CONTAINER=true

3.真相浮出水面

ENV ASPNETCORE_URLS=http://+:80 \

沒(méi)錯(cuò)正是在基礎(chǔ)鏡像.NET Core Runtime Dependencies構(gòu)建鏡像的Dockerfile中指定了應(yīng)用終結(jié)點(diǎn)URL

ENV?ASPNETCORE_URLS=http://+:80

所以你想修改默認(rèn)端口,在你的Dockerfile添加如下,修改默認(rèn)值即可:

ENV?ASPNETCORE_URLS=http://+:5000

4.寫(xiě)在末尾

  • 通過(guò)這樣剝洋蔥般的溯源鏡像,你會(huì)發(fā)現(xiàn)到最后,最后一個(gè)鏡像一定是操作系統(tǒng)鏡像,這也說(shuō)明了一個(gè)鏡像就是在一個(gè)操作系統(tǒng)鏡像上不斷增加運(yùn)行環(huán)境、SDK等等,進(jìn)而形成特定的新鏡像.

  • Docker容器的最佳實(shí)踐是一個(gè)容器只運(yùn)行一個(gè)進(jìn)程,意味著一個(gè)容器就暴露一個(gè)端口,所以去修改默認(rèn)端口沒(méi)有很大的必要性。這里對(duì)其問(wèn)題溯源只是作為一個(gè)了解.

長(zhǎng)按二維碼關(guān)注

總結(jié)

以上是生活随笔為你收集整理的【Docker】Asp.net core在docker容器中的端口问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。