我希望能够在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个文件:
- executeJar.sh
- execute.sh
- 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包的输出结果?