我正在尝试在 docker 中运行 hello word java 应用程序。该应用程序由 gradle init 生成。我使用 gradle installDist 生成可运行文件。我可以在本地运行可运行程序,没有任何问题。但是当我尝试从 docker 运行时出现错误。这是 docker 文件内容:
FROM gradle:7.1.0-jdk11 AS builder
WORKDIR /home/gradle/src
COPY --chown=gradle:gradle . /home/gradle/src
RUN gradle installDist
FROM openjdk:17-oracle
COPY --from=builder /home/gradle/src/build/install/app/ /app/
WORKDIR /app
CMD ["bin/app"]
Run Code Online (Sandbox Code Playgroud)
docker 文件与 build.gradle 放置在同一文件夹中,并且从该文件夹运行 docker build 命令。构建运行成功。但是只要我在 docker GUI 中单击“运行”,容器就会立即失败,并显示错误消息“xargs 不可用”
Tol*_*mos 19
正如错误所描述的,xargs不可用。
查看你的Dockerfile,你使用的jdk镜像是基于Oracle Linux的
因此,您需要添加以下行来安装所需的包
RUN microdnf install findutils
Run Code Online (Sandbox Code Playgroud)
对于基于 Alpine 的图像,命令为:
RUN apk update && apk add findutils
Run Code Online (Sandbox Code Playgroud)
你的 Dockerfile 应该是
FROM gradle:7.1.0-jdk11 AS builder
WORKDIR /home/gradle/src
COPY --chown=gradle:gradle . /home/gradle/src
RUN gradle installDist
FROM openjdk:17-oracle
RUN microdnf install findutils
COPY --from=builder /home/gradle/src/build/install/app/ /app/
WORKDIR /app
CMD ["bin/app"]
Run Code Online (Sandbox Code Playgroud)
xargs从 Gradle 版本 7.5 开始,添加了对存在的显式检查来解决此问题,这就是为什么您在运行 Gradle 包装器脚本本身或使用Gradle 分发xargs is not available构建的应用程序的启动脚本时看到该消息的原因插入。
请注意,不存在的情况非常罕见xargs,因为它是 POSIX 标准的一部分。请参阅POSIX.1-2017 中 xargs 文档的这一部分(重点是我的):
xargs 实用程序通常仅在基于 System V 的系统中找到;BSD 系统包含一个 apply 实用程序,提供类似于 xargs -n number 的功能。SVID 将 xargs 列为软件开发扩展。POSIX.1-2017 的这卷不同意它仅用于开发的观点,因此它不是可选的。
但是openjdkDocker 镜像版本 >= 14 不包含xargs. 也就是说,这些图像已被弃用,不应再使用。xargs我测试了许多替代的 JDK 映像,并编译了在该问题的评论中已安装的映像的列表。在撰写本文时,除了已弃用的openjdk映像之外,只有ubi9-minimalEclipse Temurin 映像的变体没有xargs. 我测试的所有其他图像都正常。
如果您确实想使用默认情况下没有的映像xargs,您当然可以使用映像的包管理器xargs作为包的一部分进行安装,如另一个答案中所述。findutils
| 归档时间: |
|
| 查看次数: |
9094 次 |
| 最近记录: |