簡體   English   中英

在 ZC5FD214CDD0D2023B427Z2E7B3 容器中使用 shell 腳本執行 Java Jar

[英]Execute Java Jar using shell script in Docker container

我想在 Z05B6053C41A2134EAFD6 容器中的 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 o/p:你好 John。

在我的工作目錄中有 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"]

執行Jar.sh 內容:

#!/bin/bash
echo "This is from execute jar . sh"
java -cp SampleJar.jar SampleJar John

執行.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 將被執行,case alpha 將被執行,executeJar.sh 將被調用。 現在 executejar.sh 應該執行 java jar。 所以最終的 output 為

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 )不包括 Z93F725A07423FE1C889F4 運行時環境。

您有以下選擇:

我更喜歡第二種選擇,除非你真的需要 ubuntu 作為你的基礎容器。 另請參閱 openjkd 的 docker 集線器頁面,它有幾個其他可用的變體,例如 opnejdk

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM