【问题标题】:Create Docker Image For JRE FROM scratch从头开始为 JRE 创建 Docker 映像
【发布时间】:2019-03-29 11:49:46
【问题描述】:

我正在尝试使用没有任何操作系统的 JRE 创建图像。我试过这个不工作的 Dockerfile。

    FROM openjdk:11.0.1-jdk-oraclelinux7 as JDK
    RUN jlink --no-header-files --no-man-pages --add-modules java.base,java.desktop,java.logging,java.sql --output /jre

    FROM scratch
    #FROM oraclelinux:7-slim
    COPY --from=JDK /jre /jre
    ARG JAR_FILE
    COPY ${JAR_FILE} /app.jar
    CMD ["/jre/bin/java", "-jar", "/app.jar"]

我收到以下错误:

    standard_init_linux.go:190: exec user process caused "no such file or directory"

如果我用 oraclelinux 替换从头开始,它就可以正常工作。任何线索为什么我不能使用从头开始。使用scratch的原因是为了减小图像的大小。

感谢任何帮助。

【问题讨论】:

  • 您确定要使用 Oracle 吗?我问是因为他们的执照......
  • 我想从头开始创建映像,而不是 oraclelinux。 Oraclelinux 的使用只是调试的一部分。
  • 我刚刚又看了一遍第一句话... docker 只是一组进程 + chroot + 网络虚拟化。需要系统。例如安装 JDK,使用专门的包管理器。
  • 请参阅关于从头开始构建映像的 docker 文档。 docs.docker.com/samples/library/scratch 。我正在尝试做类似的事情,但它不起作用。
  • jlink生成的jre是静态二进制吗?如果不是这个二进制文件将依赖于操作系统共享库

标签: java docker dockerfile


【解决方案1】:

热点源目前不支持静态链接。请参阅http://mail.openjdk.java.net/pipermail/hotspot-dev/2013-September/010810.html 了解更多信息。

【讨论】:

  • 您引用了 2013 年的消息来源,即 5 岁以上。您知道这与 OP 的问题有关吗?如果是这样,你能澄清一下吗?
  • 这个答案是正确的,虽然是旧链接。这里的问题是 JRE 仅支持动态链接,这意味着它需要 glibc(可能还有其他),而这些链接在暂存映像中不可用。
猜你喜欢
  • 2021-12-17
  • 1970-01-01
  • 2018-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多