Asp.net
無法載入共享庫“libgdiplus” - Docker [帶有 Aspose API 的 .NET 應用程序]
當我創建一個用於部署的 docker 文件時,該應用程序通常在開發環境中工作,它因libgdiplus問題而失敗。
DockerFile
FROM mcr.microsoft.com/dotnet/core/aspnet:3.0 AS base WORKDIR /app FROM mcr.microsoft.com/dotnet/core/sdk:3.0 AS build RUN apt-get update && apt-get install -y apt-utils RUN apt-get install -y libfontconfig1 RUN apt-get install -y libgdiplus RUN apt-get install -y libc6-dev RUN ln -s /usr/lib/libgdiplus.so/usr/lib/gdiplus.dll # copy csproj and restore as distinct layers WORKDIR /src COPY HelloWorld/HelloWorld.csproj HelloWorld/ RUN dotnet restore HelloWorld/HelloWorld.csproj COPY . . WORKDIR /src/HelloWorld RUN dotnet build HelloWorld.csproj -c Release -o /app FROM build AS publish RUN dotnet publish HelloWorld.csproj -c Release -o /app FROM base AS final WORKDIR /app COPY --from=publish /app . ENTRYPOINT ["dotnet", "HelloWorld.dll"]即使我嘗試了以下腳本來載入庫,但仍然失敗
RUN apt-get update \ && apt-get install -y --allow-unauthenticated \ libc6-dev \ libgdiplus \ libx11-dev \ && rm -rf /var/lib/apt/lists/*錯誤
Connection id "0HLRJJEGNBH3R", Request id "0HLRJJEGNBH3R:00000001": An unhandled exception was thrown by the application. Aspose.Slides.PptxReadException: The type initializer for 'Gdip' threw an exception. ---> System.TypeInitializationException: The type initializer for 'Gdip' threw an exception. ---> System.DllNotFoundException: Unable to load shared library 'libgdiplus' or one of its dependencies. In order to help diagnose loading problems, consider setting the LD_DEBUG environment variable: liblibgdiplus: cannot open shared object file: No such file or directory at System.Drawing.SafeNativeMethods.Gdip.GdiplusStartup(IntPtr& token, StartupInput& input, StartupOutput& output)
您正在建構容器映像中安裝 libgdiplus,但不是在最終容器映像中。您需要確保 libgdiplus 已安裝在您的最終容器映像中。
您可以考慮像這樣修改 Dockerfile:
FROM mcr.microsoft.com/dotnet/core/aspnet:3.0 AS base RUN apt-get update && apt-get install -y libgdiplus WORKDIR /app FROM mcr.microsoft.com/dotnet/core/sdk:3.0 AS build [...]