繁体   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