首页 > 解决方案 > 将特定的 JRE 添加到 .Net Dockerfile

问题描述

我正在设置一个 .net Docker 映像,其中包含一些 .net 代码。然而,代码需要访问一个非常特定版本的 Java Runtime ( jre-7u9-windowsx64.exe)。

我不知道从哪里开始将这个可执行文件添加到我的 dotnet Dockerfile 中。

dotnet 的当前 Dockerfile

FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build-env
WORKDIR /name

# Copy csproj and restore as distinct layers
COPY *.csproj ./
RUN dotnet restore

# Copy everything else and build
COPY . ./
RUN dotnet publish -c Release -o out

# Build runtime image
FROM mcr.microsoft.com/dotnet/core/aspnet:2.2
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "name.dll"]

我只想将 JRE 添加到 Dockerfile 中,以便在 Docker 启动时安装或使用它。

标签: javac#.netdocker

解决方案


因为 JRE 构成了运行时环境的一部分,所以您需要将它安装到您的# Build runtime image.

您的理想目标是找到足以同时运行 ASP.NET 和您的 .NET 代码以及 JRE 和您的 Java 代码的最小公倍数。

选项 #1:查找同时运行 ASP.NET 和 JRE 的(受信任的)容器映像

据推测,您已经采用了这种方法并且没有成功。

选项 #1:从您当前工作的解决方案开始并添加

我不熟悉,mcr.microsoft.com/dotnet/core/aspnet但这可能足以作为您的基线,并且它具有您知道它将运行您的 .NET 应用程序的优势。

因此,您的过程将是确定您还需要安装什么(如果有的话)才能运行jre-7u9-windowsx64.exe.

确定这一点的一种巧妙方法是插入该二进制文件的安装程序(在第 13-14 行之间)。这将采用RUNjre-7u9-windowsx64.exe 安装程序的形式。然后,尝试构建您的容器并查看出现了什么错误。

一个更深思熟虑的方法是确定您是否需要安装额外的软件包来支持jre-7u9-windowx64.exe,如果需要,您需要RUN ...预先安装这些(使用更多的)命令。

选项 #2:从最小基线开始并添加

或者,您可以从更基础的基线开始。我假设这里的操作系统是 Windows 而不是 Linux。大概有一个最小的 Windows 容器映像?

然后你需要添加任何需要的东西:

  • 让 ASP.NET 和您的 .NET 代码正常工作
  • 让 JRE 和您的 Java 代码正常工作

这将为您的形象提供更深思熟虑的基础,代价是要求您解决两个难题。

选项 #3:从工作的 JRE 映像开始并添加

包括在内是为了完整性,但在这种情况下不推荐。


推荐阅读