首页 > 解决方案 > 如何在 Linux Azure Function 启动命令上安装 libgdiplus apt 包?

问题描述

我们有一个在 Linux Azure Function App 上运行的 .NET Core 3.1 函数,但由于它使用 System.Drawing 库,它取决于libgdiplus默认 docker 映像中未安装的库,因此该函数失败。

在此处输入图像描述

我读了很多文章建议在Function App中添加以下启动命令,但它不起作用,它只是没有安装包。

在此处输入图像描述

apt-get update && apt-get install -y --allow-unauthenticated apt-utils libc6-dev libgdiplus libx11-dev && rm -rf /var/lib/apt/lists/*

我在 docker 日志上看到了这个,但包仍然不存在。

docker run -d -p 8122:80 --name <image-name> -e WEBSITES_ENABLE_APP_SERVICE_STORAGE=true -e WEBSITE_SITE_NAME=<website-name> -e WEBSITE_AUTH_ENABLED=False -e WEBSITE_ROLE_INSTANCE_ID=0 -e WEBSITE_HOSTNAME=<hostname> -e WEBSITE_INSTANCE_ID=<instanceId> -e HTTP_LOGGING_ENABLED=1 mcr.microsoft.com/azure-functions/dotnet:3.0-appservice-stage5 apt-get update && apt-get install -y --allow-unauthenticated apt-utils libc6-dev libgdiplus libx11-dev && rm -rf /var/lib/apt/lists/*

我可以通过在 Azure 门户上打开 SSH 会话并运行命令来手动安装包,并成功运行该功能,但显然下次重新启动时,包已经消失,因为容器也重新启动。

任何其他选项或解决此问题的任何帮助将不胜感激。

谢谢!

标签: linuxdocker.net-coreazure-functions

解决方案


我认为正确的方法是拥有自己的自定义 Dockerfile 来运行apt-get您提供的命令。

这是一个看起来像的片段:

FROM mcr.microsoft.com/azure-functions/dotnet:3.0-appservice-stage5

RUN apt-get update \
    && apt-get install -y --allow-unauthenticated \
      apt-utils \
      libc6-dev \
      libgdiplus \
      libx11-dev \
    && rm -rf /var/lib/apt/lists/*

有关如何将自定义 Docker 容器与 Azure Functions 一起使用的更多详细信息,请参阅文档


推荐阅读