java - 在 Docker 容器中使用 shell 脚本执行 Java Jar

标签 java docker shell dockerfile

我想在 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 个文件的脚本文件夹:

  1. 执行Jar.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 文件独立测试工作正常。

我使用命令构建图像: 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 运行时环境。

您有以下选择:

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

关于java - 在 Docker 容器中使用 shell 脚本执行 Java Jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62521740/

相关文章:

java - 鼠标监听器和 Action 监听器之间的区别?

java - 使用不同的定位器定位 WebElement(NoSuchElementException)

java - Spring 应用程序抛出 ArrayIndexOutOfBoundsException

node.js - 无法在生产服务器中的 Docker 容器上模块 'reflect-metadata'

bash - 与预定义的顺序优先级并行运行 bash 作业

linux - df -h 返回 98% full 时如何执行命令

java - 如何使用 Java Mongo DB 驱动程序版本 3 将 BasicDBObject 转换为 Mongo 文档?

Laravel 和 Docker : The stream or file "/var/www/html/storage/logs/laravel.log" could not be opened: failed to open stream: Permission denied

linux - Docker 构建失败 : returned a non-zero code: 1

Linux、改进的cal、shell编程