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
替换为 alpine
、slim
等;查看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的主要内容,如果未能解决你的问题,请参考以下文章