docker - 错误 "The input device is not a TTY"

标签 docker jenkins jenkins-pipeline

我正在从我的 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/

相关文章:

jenkins - 如何在 Jenkins 管道中获取成功/失败构建信息?

jenkins - 如何在声明性管道中设置作业 token ?

jenkins - 如何在 jenkins 2 管道中使用 FileParameterValue

jenkins - 什么是publishHtml reportFiles 参数语法

linux - 如何在 Amazon Linux AMI 上安装特定版本的 Docker

docker - docker容器:服务立即退出

rest - 如何使用 Jenkins API 为 Jenkins 创建 secret 文本类型的凭证?

jenkins - Kubernetes大师作为Jenkins奴隶

php - Ratchet WebSocket 连接到 mysql 数据库的几个小时后出现错误 - SQLSTATE[HY000] : General error: 2006 MySQL server has gone away

java - Docker 外部数据库映射