首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >运行Java 11类的Dockerfile

运行Java 11类的Dockerfile
EN

Stack Overflow用户
提问于 2021-12-31 21:44:46
回答 1查看 361关注 0票数 1

我正在尝试编写最简单的docker文件,该文件将在包InsertVolume中运行一个名为scripts的主类。这是我的Dockerfile

代码语言:javascript
复制
FROM adoptopenjdk/openjdk11:latest

ENV MAVEN_VERSION 3.3.9

RUN mkdir -p /usr/share/maven \
  && curl -fsSL http://apache.osuosl.org/maven/maven-3/$MAVEN_VERSION/binaries/apache-maven-$MAVEN_VERSION-bin.tar.gz \
    | tar -xzC /usr/share/maven --strip-components=1 \
  && ln -s /usr/share/maven/bin/mvn /usr/bin/mvn

CMD "mvn compile exec:java -Dexec.mainClass=\"scripts.InsertVolume\""

以下是运行命令的结果

代码语言:javascript
复制
 docker build -f Dockerfile -t test/insert .

代码语言:javascript
复制
[+] Building 0.8s (6/6) FINISHED                                                                                                                                                                                                                                          
 => [internal] load build definition from Dockerfile                                                                                                                                                                                                                 0.0s
 => => transferring dockerfile: 37B                                                                                                                                                                                                                                  0.0s
 => [internal] load .dockerignore                                                                                                                                                                                                                                    0.0s
 => => transferring context: 2B                                                                                                                                                                                                                                      0.0s
 => [internal] load metadata for docker.io/adoptopenjdk/openjdk11:latest                                                                                                                                                                                             0.7s
 => [1/2] FROM docker.io/adoptopenjdk/openjdk11:latest@sha256:ec7b07fa180861542ae8af31fbdad43f2f133170b43d29204a4b89e8f56a4c6f                                                                                                                                       0.0s
 => CACHED [2/2] RUN mkdir -p /usr/share/maven   && curl -fsSL http://apache.osuosl.org/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz     | tar -xzC /usr/share/maven --strip-components=1   && ln -s /usr/share/maven/bin/mvn /usr/bin/mvn             0.0s
 => exporting to image                                                                                                                                                                                                                                               0.0s
 => => exporting layers                                                                                                                                                                                                                                              0.0s
 => => writing image sha256:22b094dc17fc3e41b7db6cea72819e5fef1edff6dedf4c291345546fb4f53019                                                                                                                                                                         0.0s
 => => naming to docker.io/test/insert                                                                                                                                                                                                                       0.0s

Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them

然后,当我尝试使用以下方法运行映像时:

代码语言:javascript
复制
docker run test/insert

我收到错误:

代码语言:javascript
复制
docker: Error response from daemon: OCI runtime create failed: container_linux.go:367: starting container process caused: exec: "mvn compile exec:java -Dexec.mainClass=\"scripts.InsertVolume\"": executable file not found in $PATH: unknown.

当我针对项目执行时(不使用docker),mvn命令mvn compile exec:java -Dexec.mainClass="scripts.InsertVolume"成功运行。

如何修改Dockerfile,使其编译和执行类scripts.InsertVolume

在Dockerfile中使用mvn compile应该可以运行主类吗?

最新情况:

经过一些调试后,我可以使用以下Dockerfile:

代码语言:javascript
复制
FROM adoptopenjdk/openjdk11:latest

ENV MAVEN_VERSION 3.3.9

RUN mkdir -p /usr/share/maven \
  && curl -fsSL http://apache.osuosl.org/maven/maven-3/$MAVEN_VERSION/binaries/apache-maven-$MAVEN_VERSION-bin.tar.gz \
    | tar -xzC /usr/share/maven --strip-components=1 \
  && ln -s /usr/share/maven/bin/mvn /usr/bin/mvn

COPY pom.xml /build/
COPY src /build/src/

WORKDIR /build/

RUN mvn clean package

ENTRYPOINT ["java", "-jar", "target/test-1.0-SNAPSHOT.jar"]

# docker build -f Dockerfile -t test/insert .
# docker run -it --rm test/insert

更新的关键是复制项目src并使用命令进行构建:

代码语言:javascript
复制
COPY pom.xml /build/
COPY src /build/src/

WORKDIR /build/

RUN mvn clean package
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-01 00:13:21

首先检查tar -xzC /usr/share/maven --strip-components=1是否做了您认为应该做的事情。

换句话说,在您的Dockerfile中,添加用于测试RUN ls -alrth /usr/bin/mvn et RUN find /usr/share/maven/以重复检查符号链接/usr/bin/mvn实际上引用了现有的/usr/share/maven/bin/mvn文件。

您也可以对docker run -it --rm test/insert bash进行同样的操作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70545831

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档