You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何仅使用-i参数时仍能获取容器进程的输出?

为什么docker exec -i运行redis-cli仍能收到STDOUT输出?

这是因为docker exec有个默认行为:只要不使用-d(后台执行)参数,容器内进程的标准输出(STDOUT)和标准错误(STDERR)默认就会绑定到你执行命令的本地终端,和是否添加-i/-t参数无关。

拆解下相关参数的实际作用:

  • -i的作用仅仅是保持容器内进程的标准输入(STDIN)处于打开状态,让你能给redis-cli输入命令(比如set key 1)。
  • -t是用来分配伪终端(PTY),目的是让交互体验更接近本地终端(比如支持命令行编辑、颜色高亮),但它不决定STDOUT是否输出到终端。

所以你执行docker exec -i abc123 redis-cli时:

  1. -i让redis-cli能读取你输入的命令
  2. 因为没加-d,redis-cli的STDOUT默认直接输出到你的终端,所以你能看到"OK"的响应。

如果想验证这个逻辑,可以试试把输出重定向到空设备:

docker exec -i abc123 redis-cli > /dev/null

这时候再输入set key 1,终端就不会再显示"OK"了。

内容的提问来源于stack exchange,提问作者user22155685

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 10:12:32