docker 图像可以使用来自主机的可执行文件吗?

Can a docker image use executable from the host?

我有几个 Java 服务,每个都打包为一个单独的 jar 文件。我打算打包为 docker 图片。我是否需要在每个图像上捆绑 Java 运行 时间,或者我是否可以依赖主机(将 运行 图像)已经具有 Java 运行时间?

docker 的想法是使您的设置可移植,因此如果您不放入 Java 运行时,则无法保证它能在目标系统上正常工作。我不相信 docker 可以访问主机可执行文件,除非某处有特殊的白名单设置,但根据我的经验,它不能。

您可以使用卷将 Java 运行时从主机装载到容器中,但这会降低容器的可移植性(正如 Andrew Fox 指出的那样)。

如果您为容器使用 java:8-jre 等通用基础映像,则映像将在容器之间共享,这意味着磁盘上只有一个副本(不是每个容器一个副本)。

并不是说在这两种情况下,您仍然会有多个 JVM 运行,每个容器一个。