将特定的JRE添加到.Net Dockerfile

问题描述 投票:0回答:2

我正在设置一个 .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 启动时安装或可用。

java c# .net docker
2个回答
0
投票

因为 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 行之间)。这将采用

RUN
jre-7u9-windowsx64.exe 安装程序的形式。然后,尝试构建容器并查看会出现什么错误。

一个更经过深思熟虑的方法是确定是否需要安装额外的软件包来支持

jre-7u9-windowx64.exe
,如果需要,则需要事先安装这些(使用更多
RUN ...
)命令。

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

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

然后您需要添加所需的任何内容:

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

这将为您的图像提供更经过深思熟虑的基础但是以要求您解决两个谜题为代价。

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

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


0
投票

我也遇到了同样的问题。我的解决方案是使用包含 JRE 的 Docker 映像,将 .NET 应用程序发布为自包含式,并通过多个构建步骤将其复制到 JRE 容器

© www.soinside.com 2019 - 2024. All rights reserved.