猿问

将特定的 JRE 添加到 .Net Dockerfile

我正在设置一个 .net Docker 映像,其中包含一些 .net 代码。然而,该代码需要访问非常特定版本的 Java 运行时 ( 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 启动时安装或可用。


跃然一笑
浏览 93回答 1
1回答

慕森王

因为 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。确定这一点的一种 hacky 方法是插入此二进制文件的任何安装程序(第 13-14 行之间)。RUN这将采用jre-7u9-windowsx64.exe 安装程序的形式。然后,尝试构建您的容器并查看会出现什么错误。一种更深思熟虑的方法是确定您是否需要安装额外的软件包来支持jre-7u9-windowx64.exe,如果需要,您将需要RUN ...预先安装那些(使用进一步的)命令。选项 #2:从最小基线开始并添加或者,您可以从更基础的基线开始。我假设这里的操作系统是 Windows 而不是 Linux。大概有一个最小的 Windows 容器映像?然后你需要添加任何需要的东西:让 ASP.NET 和您的 .NET 代码正常工作让 JRE 和您的 Java 代码正常工作这将为您的图像提供更深思熟虑的基础,但代价是要求您解决两个难题。选项 #3:从工作的 JRE 映像开始并添加为了完整性而包括在内,但在这种情况下不推荐。
随时随地看视频慕课网APP

相关分类

Java
我要回答