我想在 docker 容器中借助 shell 脚本执行一个 java jar。我的 java 程序只接受命令行参数并打印消息以及作为命令行参数传递的 malue。
class SampleJar {
public static void main(String [] args) {
String msg = args[0];
System.out.println("Hello " + msg);
}
}
我构建了 jar,并且 jar 工作正常。 java -jar SampleJar.jar 约翰 o/p:你好,约翰。
在我的工作目录中有 Dockerfile 和脚本文件夹。 包含 3 个文件的脚本文件夹:
- 执行Jar.sh
- 执行.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:最新的 alpha
-it 用于交互模式 exp-container 是容器的名字
因此 execute.sh 将被执行,case 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 的输出?
最佳答案
普通的 ubuntu docker 容器(FROM ubuntu
)不包含 java 运行时环境。
您有以下选择:
- 将 java 安装到 ubuntu 容器中。看这里:https://dzone.com/articles/creating-a-docker-image-with-ubuntu-and-java
- 使用
openjdk
作为基础容器,例如来自 openjdk:11
除非你真的需要 ubuntu 作为你的基本容器,否则我更喜欢第二个选项。 另请参阅 openjkd 的 docker hub 页面,其中有几个其他可用的变体,例如opnejdk
关于java - 在 Docker 容器中使用 shell 脚本执行 Java Jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62521740/