从Java程序运行Docker Run命令
我必须在Java程序中运行从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();
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