从Java程序运行Docker run命令

时间:2020-03-16 15:20:08

标签: java shell docker

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

此命令应连续运行,

我创建了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());

也没有运气。

记录仪未打印任何内容。任何建议或想法表示赞赏。预先感谢!

2 个答案:

答案 0 :(得分:0)

由于getRuntime无法加载env变量,请尝试使用docker命令的完整路径。

即:

rocess process = Runtime.getRuntime().exec("/usr/bin/docker run --rm -it -p 5000:5000 test");

如果您的docker实例不在/usr/bin中,则可以使用以下命令找到它:

whereis docker
which docker
type docker

答案 1 :(得分:0)

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

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

您可以获取错误,也可以分别获取错误。如果您查看错误,则可以看到错误消息:

the input device is not a TTY

我认为,Runtime.getRuntime()不是TTY,因此您不能以交互(-it)模式运行docker。