我必须在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());
也没有运气。
记录仪未打印任何内容。任何建议或想法表示赞赏。预先感谢!
答案 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。