【发布时间】:2020-04-06 17:47:09
【问题描述】:
我已按照以下步骤操作:
在不支持 Docker 的情况下创建新的 ASP.NET Core MVC Web 应用程序
安装了
System.Drawing.CommonNuget 包添加一个名为
TestImage.png的文件-
使用以下代码成功访问文件:
byte[] imageLoaded = System.IO.File.ReadAllBytes("TestImage.png"); Image image; using (MemoryStream mStream = new MemoryStream(imageLoaded)) { image = Image.FromStream(mStream); } var image2 = new Bitmap(image); image2.Save("TestImage1.png", ImageFormat.Png);到目前为止的预期行为;这是有问题的一点:
右键单击解决方案并选择:添加容器编排支持/Docker Compose/Linux(目标操作系统)
-
运行项目(docker-compose 是启动项目)。我收到一个错误:
DllNotFoundException:无法加载共享库“libdl”或其依赖项之一。为了帮助诊断加载问题,请考虑设置 LD_DEBUG 环境变量: liblibdl: cannot open shared object file: No such file or directory
我做了很多谷歌搜索,发现了这个:Unable to load DLL 'libdl' when using System.Drawing.Common NuGet package on AWS Lambda
这是我的 Dockerfile:
FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base
WORKDIR /app
EXPOSE 80
FROM microsoft/dotnet:2.2-sdk AS build
WORKDIR /src
COPY WebApplication1/WebApplication1.csproj WebApplication1/
RUN dotnet restore WebApplication1/WebApplication1.csproj
COPY . .
WORKDIR /src/WebApplication1
RUN dotnet build WebApplication1.csproj -c Release -o /app
FROM build AS publish
RUN dotnet publish WebApplication1.csproj -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "WebApplication1.dll"]
我已尝试添加以下行:
# install System.Drawing native dependencies
RUN apt-get update \
&& apt-get install -y --allow-unauthenticated \
libc6-dev \
libgdiplus \
libx11-dev \
&& rm -rf /var/lib/apt/lists/*
但是,这并没有什么不同。我怎样才能解决这个问题?或者有没有其他方法可以在不使用 System.Drawing.Common 的情况下解决这个问题。
但是,它没有奏效。我该如何解决这个问题?
或者,有没有办法避免system.drawing?
【问题讨论】:
-
我有相同的设置,它适用于 netcoreapp2.2,System.Drawing.Common 4.5.1。你在哪里添加 RUN 命令?如果您将其添加到上面的
base,它应该可以工作。 -
你解决了吗?我有一种感觉,您可能在错误的地方添加了这些行。您需要它们在“基础”/“最终”图像中可用。