我正在从我的 Jenkinsfile
运行以下命令。但是,我收到错误“输入设备不是 TTY”。
docker run -v $PWD:/foobar -it cloudfoundry/cflinuxfs2 /foobar/script.sh
有没有办法在不使用交互模式的情况下从 Jenkinsfile
运行脚本?
我基本上有一个名为 script.sh
的文件,我想在 Docker 容器中运行它。
最佳答案
删除 -it
从您的 cli 中使其成为非交互式并删除 TTY。如果您也不需要,例如在 Jenkins 或 cron 脚本中运行你的命令,你应该这样做。
或者您可以将其更改为 -i
如果您通过管道输入不是来自 TTY 的 docker 命令。如果你有类似 xyz | docker ...
或 docker ... <input
在您的命令行中,执行此操作。
或者您可以将其更改为 -t
如果您想要 TTY 支持但输入设备上没有它。为检查 TTY 以启用日志中输出颜色格式的应用程序执行此操作,或者当您稍后使用适当的终端附加到容器时执行此操作。
或者,如果您需要交互式终端并且不在 Linux 或 MacOS 上的终端中运行,请使用不同的命令行界面。据报道 PowerShell 在 Windows 上包含此支持。
什么是 TTY?它是一个支持转义序列、移动光标等的终端界面,它来自于连接到大型机的愚蠢终端的旧时代。今天它由 Linux 命令终端和 ssh 接口(interface)提供。见 wikipedia article for more details .
要查看使用和不使用 TTY 运行容器的区别,请运行没有 TTY 的容器:docker run --rm -i ubuntu bash
.在该容器内,使用 apt-get update; apt-get install vim
安装 vim .请注意缺少提示。对文件运行 vim 时,尝试在文件中移动光标。
关于docker - 错误 "The input device is not a TTY",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43099116/