在Docker容器中使用shell脚本执行Java Jar文件

3

我希望能够在Docker容器中使用Shell脚本来执行Java JAR程序。我的Java程序只需接受命令行参数并打印出消息以及作为命令行参数传递的值。

class SampleJar {
   public static void main(String [] args) {
      String msg = args[0];
      System.out.println("Hello " + msg);
   }
}

我构建了jar包,并且jar包能够正常工作。 java -jar SampleJar.jar John 输出结果: Hello John.

在我的工作目录下有Dockerfile和scripts文件夹。 scripts文件夹中有3个文件:

  1. executeJar.sh
  2. execute.sh
  3. SampleJar.jar

我的Dockerfile内容如下:

FROM ubuntu
WORKDIR /opt
#COPY execute.sh .
#COPY executejar.sh .
#COPY SampleJar.jar .
COPY scripts /
ENTRYPOINT ["/execute.sh"]
CMD ["alpha"]

executeJar.sh 内容:

#!/bin/bash
echo "This is from execute jar . sh"
java -cp SampleJar.jar SampleJar John

execute.sh 内容:

#!/bin/bash
echo "This is from execute.sh"

case "$1" in
        alpha)
                echo "executing alpha script"
                /executejar.sh "@"
        ;;
esac

这个jar文件已经经过独立测试,可以正常工作。

我使用以下命令构建镜像: docker build -t exp . exp是镜像的名称,"."表示当前目录下有Dockerfile文件。

我创建了一个容器: docker run -it --name exp-container exp:latest alpha -it参数用于交互式模式,exp-container是容器的名称。

因此,execute.sh将被执行,并且将执行alpha案例,然后调用executeJar.sh。 现在executejar.sh应该执行Java jar文件。 因此,最终输出如下:

docker run -it --name exp-container2 exp:latest alpha
This is from execute.sh
executing alpha script
This is from execute jar . sh
/executejar.sh: line 3: java: command not found

如何获取jar包的输出结果?

1个回答

1

纯净的Ubuntu Docker容器 (FROM ubuntu) 不包含Java运行时环境。

您有以下选项:

除非您真的需要Ubuntu作为基础容器,否则我更喜欢第二个选项。 另请参阅Docker Hub页面上的openjkd,其中还提供了其他几个变体,例如opnejdk。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接