【问题标题】:Getting error while executing the docker command from java program从java程序执行docker命令时出错
【发布时间】:2015-07-16 02:44:21
【问题描述】:

我尝试从 Java 代码执行以下 docker 命令:

command: ***docker exec -it reverent_hoover date***

(这里,reverente_hoover 是容器名称。)

当我从 Linux 执行上述命令时,它给了我以下输出:

2015 年 5 月 6 日星期三 05:19:28 UTC

但是当我尝试从 Java 代码执行它时,它给了我这个错误:

time="2015-05-05T19:31:19+05:30" level="fatal" msg="无法启用 tty 非 tty 输入模式"

我不知道如何解决这个问题。

【问题讨论】:

    标签: java docker


    【解决方案1】:

    Issue 10734 提及:

    Java 进程未向 docker CLI 提供 TTY,但您已通过在命令中指定 -t 要求提供 TTY。
    那么,图像真的需要 TTY 吗?如果没有,不要指定-t...如果图像根本不需要标准输入,也不要指定-i

    如果它确实需要 TTY,那么您需要为您的命令设置 TTY,它应该可以工作。

    例如,见“persistent local tty session with java

    而不是Runtime.getRuntime().exec("command");Runtime.getRuntime().exec("/bin/sh"); 并坚持Process 对象

    Runtime.exec with Unix console programs”说明了在使用less的上下文中:

        Process p = Runtime.getRuntime().exec(new String[] {"sh", "-c",
                "less >/dev/tty"});
        OutputStream out = p.getOutputStream();
        out.write("Lengthy message".getBytes());
        out.close();
        System.out.println("=> "+p.waitFor());
    

    【讨论】:

    • 我只需要像“Wed May 6 05:19:28 UTC 2015”这样的输出。所以我需要以哪种格式给出命令。
    • @KaviChinna 我只是想解释一下 tty 部分。
    • 无论如何,我通过从命令中删除 -it 标志得到了输出。
    猜你喜欢
    • 1970-01-01
    • 2013-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多