我是 Docker 新手,我正在研究和学习......所以......对于糟糕的代码感到抱歉。我在构建 docker 映像时尝试生成 jar;我想使用 openjdk 的基本映像并使用 gradlew(gradle-wrapper)进行清理和构建,但我在使用 gradlew 时遇到问题。
目前我有这个代码:
FROM openjdk:17.0.2
LABEL authors="ivanh"
WORKDIR /app
COPY ./ .
RUN ./gradlew clean build
ENTRYPOINT ["ls"]
EXPOSE 8001
当我跑步时
docker build -t citas .
我遇到这个问题
------
> [4/4] RUN ./gradlew clean build:
0.390
0.390 xargs is not available
0.390
------
Dockerfile:5
--------------------
3 | WORKDIR /app
4 | COPY ./ .
5 | >>> RUN ./gradlew clean build
6 | ENTRYPOINT ["ls"]
7 | EXPOSE 8001
--------------------
ERROR: failed to solve: process "/bin/sh -c ./gradlew clean build" did not complete successfully: exit code: 1
我正在搜索此事并向 IA 询问。我发现一个解决方案是更改 openjdk 映像,另一种解决方案是添加此命令
RUN microdnf install findutils
,但使用最后一个解决方案时,下载和安装 util 的时间非常慢。
我很困惑,因为我认为 gradle-wrapper 的目的是在没有安装 gradle 的情况下运行命令。有人可以帮我澄清一下吗?如果唯一的解决方案是更改 openjdk 映像,您能给我推荐一个吗?
尝试使用
gradle:jdk17
基础镜像,它基于 OpenJDK 17.0.10。
FROM gradle:jdk17
WORKDIR /app
COPY . .
RUN ./gradlew clean build
ENTRYPOINT [ "ls" ]
假设测试项目布局如下:
├── app
│ ├── build.gradle.kts
│ └── src
│ ├── main
│ │ ├── java
│ │ │ └── org
│ │ │ └── example
│ │ │ └── App.java
│ │ └── resources
│ └── test
│ ├── java
│ │ └── org
│ │ └── example
│ │ └── AppTest.java
│ └── resources
├── Dockerfile
├── gradle
│ ├── libs.versions.toml
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
└── settings.gradle.kts