簡體   English   中英

從 Java 程序內部運行 docker 容器

[英]Run a docker container from inside java program

我嘗試從 Java 程序內部運行 docker 容器,但 docker 容器無法運行。

當我執行此命令時,我將其用於終端中的進程構建器,容器啟動並且一切正常。

我在 java 程序中打印了工作目錄,這是啟動 docker 容器的正確目錄。

我還將命令更改為:

String[] dockerCommand = new String[] {"java", "-cp", "target/MavenAsteroidsServer-1.0-SNAPSHOT.jar", "asteroidsserver.AsteroidsServer", "1600", "1600", "127.0.1.1", "8851", "8901"};

這行得通,所以在沒有 docker 容器的情況下運行程序是可行的。

這是我用來從 java 程序內部運行 docker 容器的代碼:

String[] dockerCommand = new String[] {"docker", "run", "-it", "--rm", "--net=\"host\"", "-p", "8901:8901", "-v", "\"$PWD\":/app", "-w", "/app", "demo/maven:3.3-jdk-8", "java", "-cp", "target/MavenAsteroidsServer-1.0-SNAPSHOT.jar", "asteroidsserver.AsteroidsServer", "1600", "1600", "127.0.1.1", "8851", "8901"};

ProcessBuilder probuilder = new ProcessBuilder(dockerCommand);

Process process;
try {
    process = probuilder.start();
    int status = process.waitFor();
} catch (InterruptedException e) {
} catch (IOException ex) {
}

我希望容器運行,但沒有任何反應。 此外,當我嘗試在 try 和 catch 塊中捕獲它們時,我沒有收到任何錯誤消息(代碼中未顯示)

大多數從程序中以編程方式運行命令的方法不涉及 shell,因此不要做 shell 喜歡的任何好事情,例如變量插值。 特別是,這對參數:

..., "-v", "\"$PWD\":/app", ...

告訴 Docker(我認為)創建一個名為"$PWD"的新命名卷(如quote、美元、P、W、D、quote),並將新的空卷掛載到容器中的/app上。 沒有什么會導致它擴展到當前目錄的名稱或刪除額外的引號。

暫無
暫無

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

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