【发布时间】:2020-06-22 19:06:12
【问题描述】:
我想在 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 和 scripts 文件夹。 包含 3 个文件的脚本文件夹:
- executeJar.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 文件在独立测试时运行良好。
我使用命令构建图像: 码头工人构建-t exp。 exp 是图像的名称 & 。表示当前目录中存在的 Dockerfile
我创建容器 docker run -it --name exp-container exp:latest 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
我怎样才能得到罐子的输出?
【问题讨论】:
标签: java docker shell dockerfile