[英]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.