Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Java程序运行Docker Run命令_Java_Shell_Docker - Fatal编程技术网

从Java程序运行Docker Run命令

从Java程序运行Docker Run命令,java,shell,docker,Java,Shell,Docker,我必须在Java程序中运行dockerrun--rm-it-p5000:5000 test命令 该命令应连续运行 我创建了run.sh文件并将cmd放入其中 StringBuffer output = new StringBuffer(); ProcessBuilder processBuilder = new ProcessBuilder("nohup", "sh", "run.sh"); try { Process start = processBuilder.start();

我必须在Java程序中运行
dockerrun--rm-it-p5000: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());
也没有运气


记录器没有打印任何内容。欢迎提出任何建议或想法。提前谢谢

由于
getRuntime
不加载
env
vars,请尝试使用
docker
命令的完整路径

即:

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

whereis docker
which docker
type docker

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

您可以获取错误,也可以单独获取错误。如果您查看错误,您可以看到它显示:

the input device is not a TTY

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

输出是什么?程序执行,而不是运行docker映像。没有记录器。
BufferedReader input = new BufferedReader(new InputStreamReader(
                process.getErrorStream()));
the input device is not a TTY