【问题标题】:Execute Java Jar using shell script in Docker container在 Docker 容器中使用 shell 脚本执行 Java Jar
【发布时间】: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 个文件的脚本文件夹:

  1. executeJar.sh
  2. 执行.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 文件在独立测试时运行良好。

我使用命令构建图像: 码头工人构建-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


    【解决方案1】:

    普通的 ubuntu docker 容器 (FROM ubuntu) 不包含 java 运行时环境。

    您有以下选择:

    除非你真的需要 ubuntu 作为你的基础容器,否则我更喜欢第二个选项。 另请参阅 openjkd 的 docker hub 页面,该页面还有其他几个可用的变体,例如opnejdk

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-13
      • 1970-01-01
      • 2019-12-02
      • 2022-10-20
      • 2021-05-17
      • 1970-01-01
      • 2021-10-22
      • 2012-10-04
      相关资源
      最近更新 更多