首页 > 解决方案 > 从 Java 程序运行 Docker 运行命令

问题描述

我必须docker run --rm -it -p 5000:5000 test在我的 Java 程序中运行该命令。

这个命令应该连续运行,

我创建了run.sh文件并将 cmd 放入其中,

StringBuffer output = new StringBuffer();
ProcessBuilder processBuilder = new ProcessBuilder("nohup", "sh", "run.sh");
try {

    Process start = processBuilder.start();
    InputStream input = start.getInputStream();
    int chars;
    while ((chars = input.read()) != -1) {
        output.append((char) chars);
    }
    input.close();
    logger.info(output.toString());
} catch (IOException e) {
    e.printStackTrace();
}

没运气

我也试过:

StringBuffer output = new StringBuffer();
Process process = Runtime.getRuntime().exec("docker run --rm -it -p 5000:5000 test");
InputStream input = process.getInputStream();
int chars;
while ((chars = input.read()) != -1) {
    output.append((char) chars);
}
input.close();
logger.info(output.toString());

也没有运气。

记录器不打印任何东西。任何建议或想法表示赞赏。提前致谢!

标签: javashelldocker

解决方案


首先,您也需要更改代码以获取错误。如果你改变 InputStream input = process.getInputStream();

BufferedReader input = new BufferedReader(new InputStreamReader(
                process.getErrorStream()));

你可以得到错误,你也可以单独得到错误。如果您查看错误,您会看到它说:

the input device is not a TTY

我认为它Runtime.getRuntime()不是 TTY,所以你不能在交互(-it)模式下运行 docker。


推荐阅读