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