java - 从 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());
也没有运气。
记录器不打印任何东西。任何建议或想法表示赞赏。提前致谢!
解决方案
首先,您也需要更改代码以获取错误。如果你改变
InputStream input = process.getInputStream();
至
BufferedReader input = new BufferedReader(new InputStreamReader(
process.getErrorStream()));
你可以得到错误,你也可以单独得到错误。如果您查看错误,您会看到它说:
the input device is not a TTY
我认为它Runtime.getRuntime()
不是 TTY,所以你不能在交互(-it
)模式下运行 docker。
推荐阅读
- php - 如何在php中删除array_map中的特定值
- angular - 在构造函数中使用this在角度依赖注入
- matlab - 如何在 Matlab 中求解 XQ=0 类型的矩阵?
- ngx-bootstrap - 如何从 NGX-Bootstrap datepicker 获取自定义日期格式值
- excel - 返回我假设为 MailItem 的对象的 MailItem 属性时出现类型不匹配错误
- node.js - 将 ngx-admin 从 2.3.0 更新到 3.0.0
- c# - 使用多个 case 语句转换 ORDER BY
- r - plotly中同一轴上的多个图
- android - View [Android/Kotlin] 上不必要的填充或边距
- r - R基本功能点()可以复制