我正在从我的 Jenkinsfile
运行以下命令。但是,我收到错误 “输入设备不是 TTY” 。
docker run -v $PWD:/foobar -it cloudfoundry/cflinuxfs2 /foobar/script.sh
有没有办法在不使用交互模式的情况下从 Jenkinsfile
运行脚本?
我基本上有一个名为 script.sh
的文件,我想在 Docker 容器中运行它。
原文由 Anthony 发布,翻译遵循 CC BY-SA 4.0 许可协议
从您的 cli 中删除
-it
以使其非交互并删除 TTY。如果您不需要,例如在 Jenkins 或 cron 脚本中运行您的命令,您应该这样做。或者您可以将其更改为
-i
如果您通过管道输入不是来自 TTY 的 docker 命令。如果您的命令行中有xyz | docker ...
或docker ... <input
类的内容,请执行此操作。或者您可以将其更改为
-t
如果您想要 TTY 支持但输入设备上没有它。对检查 TTY 以启用日志中输出颜色格式的应用程序执行此操作,或者当您稍后使用适当的终端附加到容器时执行此操作。或者,如果您需要交互式终端并且不在 Linux 或 MacOS 上的终端中运行,请使用不同的命令行界面。据报道 PowerShell 在 Windows 上包含此支持。
什么是 TTY?它是一个支持转义序列、移动光标等的终端界面,它来自于连接到大型机的愚蠢终端的旧时代。今天它由 Linux 命令终端和 ssh 接口提供。有关 更多详细信息,请参阅维基百科文章。
要查看使用和不使用 TTY 运行容器的区别,请运行没有 TTY 的容器:
docker run --rm -i ubuntu bash
。从该容器内部,使用apt-get update; apt-get install vim
安装 vim。请注意缺少提示。对文件运行 vim 时,尝试在文件中移动光标。