gpt4 book ai didi

azure - 如何编写 docker 文件以使用 Azure 应用服务中的 PORT 环境变量

转载 作者:行者123 更新时间:2023-12-02 21:01:41 24 4
gpt4 key购买 nike

我正在了解有关 Azure、容器、应用服务和 VNet 集成(预览)的更多信息。

我可以成功地将我的 dotnet core (3.1) API 直接部署到 Azure 应用服务(Linux 风格)并设置适当的 VNet 集成,这允许 API 在 API 运行时访问本地 192.168.. 地址可公开访问。

我想做的是将代码作为 Docker 镜像部署到 Azure 容器注册表,然后将该容器镜像部署到应用服务并使用相同的 VNet 集成。

当我执行此操作时,应用服务的容器化版本不会到达直接到应用服务所到达的相同 192.168.. 地址。

Azure 通知我可以在此处找到有关此问题的更多信息:https://github.com/Azure/app-service-linux-docs/blob/master/app_service_linux_vnet_integration.md

直接从该链接:

Linux App Service VNet Integration Azure Virtual Network (VNet) integration for Linux Web App is currently in Preview. Customers can use the VNet feature for development and integration testing with your web apps. Please do not use the feature for production purposes. Learn about how to configure VNet with your web app.

During Preview you will need to modify your application in order to integrate with VNet. This is a temporary limitation during VNet Preview release, we will remove the limitation before GA. In your application, please use the PORT environment variable as the main web server’s listening port, instead of using a hardcoded port number. The PORT environment variable is automatically set by App Service platform at startup time. For example, for a Node.js Express app, you should have the following code as part of your server.js file. The full example can be found on Github.

app.listen(process.env.PORT);

ASPNETCORE_URLS is the recommended way to configure ASP.NET Core docker image and here is the DockerFile example.

Note: we’re making continuous improvement to this VNet integration Preview feature for Linux web app, we will roll out feature improvements in the next few months.

简而言之,我必须在 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 构建过程中将监听端口配置为 ENV PORT。 Dockerfile 中的 ENTRYPOINT 命令如下所示:

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

有关 VNet 问题的更多说明,请参阅我的完整答案 here

关于azure - 如何编写 docker 文件以使用 Azure 应用服务中的 PORT 环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60193293/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com