首页 > 解决方案 > 如何使用包名为 java 类定义 Dockerfile?

问题描述

我在尝试运行一个具有与之关联的包名称的简单 java 文件时遇到问题。我的文件是:

package com.example.springboot.folder.folder1;

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}

要编译上面我使用的javac HelloWorld.java但要运行它,我需要转到 \com 之前的文件夹结构并运行java com.example.springboot.folder.folder1.HelloWorld它工作正常。

我现在正在尝试使用 dockerfile 构建和运行它,我当前的 docker 文件如下:

FROM alpine
WORKDIR /root/testdir
COPY HelloWorld.java /root/testdir

RUN apk add openjdk8
ENV JAVA_HOME /usr/lib/jvm/java-1.8-openjdk
ENV PATH $PATH:$JAVA_HOME/bin


RUN javac HelloWorld.java
CMD java -cp "java com.example.springboot.folder.folder1.HelloWorld"

它与 HelloWorld.java 程序处于同一级别

当我尝试使用构建docker build .和运行使用docker run imageid时,出现以下错误:

Error: Could not find or load main class HelloWorld
Caused by: java.lang.ClassNotFoundException: HelloWorld

任何人都可以帮我解决我可能出错的地方吗?

标签: javadockerdockerfile

解决方案


CMD java -cp "java com.example.springboot.folder.folder1.HelloWorld"

您可以简单地调用此命令:CMD java HelloWorld,将运行您HelloWorld.class在第一个命令之后生成的文件:RUN javac HelloWorld.java

但这不是一个好方法。您应该向您的 Docker 映像提供一个jar文件,然后调用此命令:CMD ["java", "-jar", "/HelloWorld.jar"]. 您需要打包您的项目并将其复制到您的 docker 映像中。


推荐阅读