Docker:java:openjdk-8-jdk-alpine 图像缺少 javac 和 tools.jar

Posted

技术标签:

【中文标题】Docker:java:openjdk-8-jdk-alpine 图像缺少 javac 和 tools.jar【英文标题】:Docker: java:openjdk-8-jdk-alpine image missing javac and tools.jar 【发布时间】:2019-06-01 13:33:35 【问题描述】:

我正在使用以下 Dockerfile 创建一个 docker 映像:

FROM java:openjdk-8-jdk-alpine

USER root
RUN apk update && apk add docker

COPY . /liveboard-tests
WORKDIR /liveboard-tests
ENTRYPOINT ["./gradlew", ":integration-tests:test", "--tests", "*Foo*"]

由于某种原因,docker 容器不包含 javac 或 tools.jar,我无法编译 java 代码。我尝试了其他各种基础镜像,它们都有同样的问题。

任何人都可以建议一个防弹最小的 Docker 文件,它会给我一个能够使用 javac 的容器并请有 tools.jar。 TIA。

【问题讨论】:

【参考方案1】:

由于您使用的是 Gradle,如果您使用 FROM gradle:X.Y.Z-jdk8-branch 会处于更好的位置 – 将 X.Y.Z 替换为您项目的 Gradle 版本,将 branch 替换为 alpineslim 等;查看here 以获取可用的标签和/或版本。

我知道这又不是主题,但是使用“Docker inside Docker”并不能很好地工作,并且会给你一些惊喜。

【讨论】:

你的建议奏效了!我在 Dockerfile 中使用了“FROM gradle:4.6.0-jdk8-alpine”。谢谢。 这个镜像创建的容器中的 gradle 可执行文件在哪里? @FarrukhNajmi,它在/opt/gradle/bin/gradle,但它是ln'ed 到/usr/bin/gradle。在这种情况下,您不需要使用包装器,因为它可以保证您正在使用的版本将会存在。 @FarrukhNajmi 记得使用 -v gradle-cache:/home/gradle/.gradle 选项运行容器,以便缓存依赖项并避免在每次编译时下载它们,如 here 所述

以上是关于Docker:java:openjdk-8-jdk-alpine 图像缺少 javac 和 tools.jar的主要内容,如果未能解决你的问题,请参考以下文章

重启docker命令(docker自动重启)

Docker教程-1-学习及安装Docker

Docker教程-1-学习及安装Docker

Docker03 Docker基础知识Docker实战

Docker学习__docker命令[docker version 和 docker info]

[转帖]Docker里运行Docker docker in docker(dind)