gpt4 book ai didi

java - 从 java 程序内部运行 docker 容器

转载 作者:行者123 更新时间:2023-11-30 05:51:18 25 4
gpt4 key购买 nike

我尝试从 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 block 中捕获它们时,我没有收到任何错误消息(代码中未显示)

最佳答案

以编程方式从程序运行命令的大多数方法不涉及 shell,因此不会执行 shell 所做的任何好事,例如变量插值。特别是,这对参数:

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

告诉 Docker(我认为)创建一个名为 "$PWD" 的新命名卷(如 quote、dollars、P、W、D、quote),并将新的空卷挂载在容器中的 /app。没有什么会导致它扩展到当前目录的名称或删除额外的引号。

关于java - 从 java 程序内部运行 docker 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53877156/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com