簡體   English   中英

如何編寫 docker 文件以在 Azure 應用服務中使用 PORT 環境變量

[英]How do I write a docker file to use the PORT environment variable in Azure App Service

我正在了解有關 Azure、容器、應用服務和 VNet 集成(預覽)的更多信息。

我可以成功地將我的 dotnet 核心 (3.1) API 直接部署到 Azure 應用服務(Linux 風格)並設置適當的 VNet 集成,這允許 API 訪問本地 192.168.. 地址,而 API 可公開訪問。

我想要做的是將代碼作為 Docker 映像部署到 Azure 容器注冊表,然后將容器映像部署到應用服務並使用相同的 VNet 集成。

當我這樣做時,應用服務的容器化版本沒有達到直接應用服務所達到的相同 192.168.. 地址。

Azure 通知我可以在此處找到有關此問題的更多信息: https : //github.com/Azure/app-service-linux-docs/blob/master/app_service_linux_vnet_integration.md

直接從該鏈接

Linux 應用服務 VNet 集成 Linux Web 應用的 Azure 虛擬網絡 (VNet) 集成目前處於預覽階段。 客戶可以使用 VNet 功能對您的 Web 應用進行開發和集成測試。 請不要將該功能用於生產目的。 了解如何使用 Web 應用配置 VNet。

在預覽期間,您需要修改應用程序以與 VNet 集成。 這是 VNet Preview 發布期間的臨時限制,我們將在 GA 之前移除該限制。 在您的應用程序中,請使用 PORT 環境變量作為主 Web 服務器的偵聽端口,而不是使用硬編碼的端口號。 PORT 環境變量由應用服務平台在啟動時自動設置。 例如,對於 Node.js Express 應用程序,您應該將以下代碼作為 server.js 文件的一部分。 完整的示例可以在 Github 上找到。

app.listen(process.env.PORT);

ASPNETCORE_URLS 是配置 ASP.NET Core docker 鏡像的推薦方式,這里是 DockerFile 示例。

注意:我們正在不斷改進 Linux Web 應用程序的此 VNet 集成預覽功能,我們將在接下來的幾個月內推出功能改進。

簡而言之,我必須在 VNet 處於預覽狀態時應用一個小的解決方法。

該頁面提供了一個指向 DockerFile 的鏈接,該鏈接顯然可用於 dotnet 核心應用程序。 https://github.com/dotnet/dotnet-docker/blob/7c18c117d9bd2d35e30cdb4a1548ac14b9f0f037/3.0/aspnetcore-runtime/nanoserver-1809/amd64/Dockerfile

如果我復制該 DockerFile 的副本,我的應用程序將不再編譯,並在轉義字符周圍出現錯誤。 如果我刪除那些我然后收到其他錯誤消息,其中許多命令是未知的。

我的問題是我不完全了解如何進行這項工作。

我必須在我的應用程序 DockerFile 中包含什么(我的版本如下)以確保正確設置應用程序的容器化版本以使用此解決方法?

我當前的 DockerFile(Visual Studio 中 API 的默認 docker 文件)。 我在這里唯一改變的是目標 Windows 版本。

#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.


FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["AZtoOnPremLDC/AZtoOnPremLDC.csproj", "AZtoOnPremLDC/"]
RUN dotnet restore "AZtoOnPremLDC/AZtoOnPremLDC.csproj"
COPY . .
WORKDIR "/src/AZtoOnPremLDC"
RUN dotnet build "AZtoOnPremLDC.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "AZtoOnPremLDC.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "AZtoOnPremLDC.dll"]

在 docker build 期間將監聽端口配置為 ENV PORT。 Dockerfile 中的 ENTRYPOINT 命令如下所示:

ENTRYPOINT "dotnet" "Tutorial.WebApi.dll" --urls="http://0.0.0.0:${PORT:-80}"

有關 VNet 問題的更多解釋,請在此處查看我的完整答案

根據消息,您無需更改 Dockerfile 中的任何內容即可使一切正常。 環境變量 PORT 僅適用於與 Vnet 集成的 Azure Web 應用程序,並且在您想要偵聽端口時在應用程序代碼中使用,而不是在 Dockerfile 中使用。

您需要做的是使用合適的基礎鏡像,使用 Dockerfile 創建鏡像,然后對其進行測試,直到它在本地正常工作。 然后使用您使用的語言在您的應用程序中使用環境變量 PORT 更改偵聽端口。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM