當我在 VS 中本地運行我的 .NET Core API 時,我可以在localhost:5000. 我添加了一個 Dockerfile 來對其進行容器化,但我不清楚如何確定要公開和使用的埠?
這是我的 Dockerfile:
FROM mcr.microsoft.com/dotnet/sdk:6.0-alpine as build
WORKDIR /app
COPY . .
RUN dotnet restore
RUN dotnet publish -o /app/published-app
EXPOSE 5000
ENV ASPNETCORE_URLS=http://*:5000
FROM mcr.microsoft.com/dotnet/aspnet:6.0-alpine as runtime
WORKDIR /app
COPY --from=build /app/published-app /app
ENTRYPOINT [ "dotnet", "/app/Api.dll" ]
影像構建,我使用以下命令運行它:
docker run -p 5000:5000 --name my-api -d my-api
我可以看到它在我的 Docker 客戶端的埠 5000 上運行,但導航到localhost:5000沒有結果(“本地主機沒有發送任何資料”)。
uj5u.com熱心網友回復:
將 ASPNETCORE_URLS 和 EXPOSE 移動到運行時影像部分,如下所示,也嘗試更改
http://*:5000
到
http:// :5000
Dockerfile
FROM mcr.microsoft.com/dotnet/sdk:6.0-alpine as build
WORKDIR /app
COPY . .
RUN dotnet restore
RUN dotnet publish -o /app/published-app
FROM mcr.microsoft.com/dotnet/aspnet:6.0-alpine as runtime
WORKDIR /app
COPY --from=build /app/published-app /app
EXPOSE 5000
ENV ASPNETCORE_URLS=http:// :5000
ENTRYPOINT [ "dotnet", "/app/Api.dll" ]
uj5u.com熱心網友回復:
Rakesh 的回答有效,但我只想給你另一種選擇。我更喜歡讓容器在埠 80 上偵聽,因為它是默認值。如果你想這樣做,你可以洗掉 EXPOSE 和 ASPNETCORE_URLS 陳述句,所以你的 Dockerfile 變成
FROM mcr.microsoft.com/dotnet/sdk:6.0-alpine as build
WORKDIR /app
COPY . .
RUN dotnet restore
RUN dotnet publish -o /app/published-app
FROM mcr.microsoft.com/dotnet/aspnet:6.0-alpine as runtime
WORKDIR /app
COPY --from=build /app/published-app /app
ENTRYPOINT [ "dotnet", "/app/Api.dll" ]
然后你需要將埠 80 映射到你想要的埠,當你運行它時
docker run -p 5000:80 --name my-api -d my-api
現在您可以通過 http://localhost:5000/ 訪問它
基于 aspnet 映像的 .NET 應用程式默認偵聽埠 80 的原因是 Microsoft 將 ASPNETCORE_URLS 環境變數設定為http:// :80其中,并覆寫了您在 appsettings 中的任何埠配置。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/429181.html
