linux docker run i t,“ docker exec”命令的“ -i”和“ -t”选项的作用是什么?

小编典典

-i,--interactive即使没有连接,也可以保持STDIN处于打开状态,如果您完全想键入任何命令,都需要打开。

-t,--tty分配一个伪TTY,一个伪终端,它将用户的“终端”与stdin和stdout连接起来。(请参阅container/container.go)

如果执行回显,则仅-t需要。

但是对于在其中输入输入的交互式会话,则需要-i。

由于-i保持stdin处于打开状态,因此还可以使用它来将输入通过管道传递到分离的docker容器。即使使用-d(分离)也可以。

$ echo hello | docker run -i busybox cat

hello

-i 即使未连接STDIN也保持打开状态,在这种情况下STDOUT的状态是什么?

它是docker exec由设置的docker run。

不幸的是,您的发现仅相当于tty在centos6与ubuntu:14.04之间的行为差​​异。exec内仍然没有功能性tty-只需执行一下ls -la

/proc/self/fd/0,看看它是指向a pts不存在的断开链接。

我们正在处理的实际错误是某些标准库假定/ proc / self / fds /中的符号链接必须是有效的符号链接。

问题在于,tty是在主机外部创建的,在容器中没有对它的引用,就像/dev/console在主容器中如何设置一样。

解决此问题的一种方法是分配并将绑定devpts从主机装入到容器中。

该PR现在允许(自17.06起):

zacharys-pro:dev razic$ docker run --rm -t -d ubuntu bash

83c292c8e2d13d1b1a8b34680f3fb95c2b2b3fef71d4ce2b6e12c954ae50965a

zacharys-pro:dev razic$ docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

83c292c8e2d1 ubuntu "bash" 2 seconds ago Up 1 second xenodochial_bardeen

zacharys-pro:dev razic$ docker exec -ti xenodochial_bardeen tty

/dev/pts/1

(在17.06之前,tty返回“ not a tty”)

2020-06-03

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值