java - 将特定的 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 启动时安装或使用它。
解决方案
因为 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 映像开始并添加
包括在内是为了完整性,但在这种情况下不推荐。
推荐阅读
- python-3.x - 烧瓶响应反斜杠问题
- python - 为什么即使输入是整数,我也会不断收到 TypeError?
- javascript - 如何在网站呈现之前检查 React/Gatsby 中的 window.innerWidth?
- tree - 使用队列的二叉树级别顺序遍历(数组实现)
- python - Box2D 关节伸出不合适的位置 - 允许物体通过。我怎样才能让它们更“紧”
- ios - swifty json 解析数组对象
- javascript - Redux 管理对象数组和查找嵌套对象
- bash - 无法在 cgi 脚本中运行 find 和 xargs
- python - 数组中字符串之间的常用字符
- android - 有没有一种简单的方法可以从 Kotlin 的字符串资源文件中获取具有默认值的数据类对象?