远程登录docker执行shell报错input is not a terminal问题
背景
最近要远程去k8s docker里面获取信息,于是,写了一个如下的命令,执行完之后,报错了。
ssh 192.168.100.2 sudo crictl exec -it xxx.docker /usr/bin/lscpu --online --extended
错误信息如下:
time=“2025-07-11T21:00:39+08:00” level=fatal msg=“execing command in container failed: input is not a terminal”
问题分析
execing command in container failed: input is not a terminal
翻译一下:在容器中执行命令失败:输入不是终端
表明在尝试通过 SSH 登录到宿主机并在 Docker 容器内执行命令时,系统报告输入不是一个终端(input is not a terminal)。这种情况通常是因为试图以交互模式运行命令,但当前环境不支持这种模式。
这就涉及到docker参数问题。
-it 是 Docker 命令中一个常用的选项组合,用于在容器中启动一个交互式终端(Interactive Terminal)。它实际上是两个选项的缩写:
选项 | 含义 |
---|---|
-i 或 --interactive | 保持标准输入(STDIN)打开,允许你向容器发送输入(比如键盘输入)。 |
-t 或 --tty | 分配一个伪终端(pseudo-TTY),让你可以像操作真实终端一样与容器交互。 |
如果需要进入docker,进行交互式操作,则需要-it,如果不需要,则去掉-it。
解决方法
去掉-it即可。
ssh 192.168.100.2 sudo crictl exec xxx.docker /usr/bin/lscpu --online --extended