我正在设置一个 .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 启动时安装或可用。
因为 JRE 是运行时环境的一部分,所以您需要将其安装到您的
# Build runtime image
中。
您的理想目标是找到足以运行 ASP.NET 和您的 .NET 代码以及 JRE 和 Java 代码的最低公倍数。
想必您已经采用了这种方法但没有成功。
我不熟悉
mcr.microsoft.com/dotnet/core/aspnet
但这很可能仍然足以作为您的基准,并且它的优点是您知道它将运行您的 .NET 应用程序。
因此,您的过程将是确定您还需要安装什么(如果有的话)才能运行
jre-7u9-windowsx64.exe
。
确定这一点的一种巧妙方法是插入该二进制文件的安装程序(第 13-14 行之间)。这将采用
RUN
jre-7u9-windowsx64.exe 安装程序的形式。然后,尝试构建容器并查看会出现什么错误。
一个更经过深思熟虑的方法是确定是否需要安装额外的软件包来支持
jre-7u9-windowx64.exe
,如果需要,则需要事先安装这些(使用更多 RUN ...
)命令。
或者,您可以从更基础的基线开始。我假设这里的操作系统是Windows而不是Linux。大概有一个最小的 Windows 容器镜像?
然后您需要添加所需的任何内容:
这将为您的图像提供更经过深思熟虑的基础但是以要求您解决两个谜题为代价。
为了完整性而包含在内,但在这种情况下不推荐。
我也遇到了同样的问题。我的解决方案是使用包含 JRE 的 Docker 映像,将 .NET 应用程序发布为自包含式,并通过多个构建步骤将其复制到 JRE 容器