在 ssh 1 用docker run -t --rm ubuntu:20.04
启动命令,没有加-i
,此时输入任何内容都像进入了黑洞一样。
然后 ssh 2 用docker inspect 容器 ID | grep Pid
查出来的 pid 是 28160 ,此时往/proc/28160/fd/0
、/proc/28160/fd/1
、/proc/28160/fd/2
三个 fd 写数据,ssh 1 都可以收到并且回显。
从我对-i
参数的描述来看,没有加-i
所以容器的标准输入没有和当前终端连上,所以只能看到容器的输出,无法输入,但是这个时候在 ssh 2 上的输入都跑哪里去了呢?这个找了好久,报错当前 ssh 的 pst 设备去找也没能读到。
1
Lighfer OP 啊这,markdown 格式居然样式全没了。。。
|
2
julyclyde 2022-07-01 10:01:18 +08:00
你看看 /proc/28160/fd/0 指向哪里呢?应该个 pty 吧
你说的 pst 是什么? |
3
Lighfer OP @julyclyde 不好意思,打错了,是 pts 。所有的 fd 都指向 /dev/pts/0 ,一层一层往上,都是这个设备。lsof 看有很多个进程的 0 1 2 都是指向这个设备
|
4
julyclyde 2022-07-02 11:14:30 +08:00
@Lighfer -t 启动容器会单独分配一个 pty 给他用的
pts 就是 pty slave 的意思 你 ssh 过去的 pts 和容器自己的 pts 当然不是同一个了 需要用 docker attach 进去 |