大佬们,请教一个 docker 的 -t 参数的问题,万谢

2022-06-30 15:23:31 +08:00
 Lighfer

在 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 设备去找也没能读到。

793 次点击
所在节点    问与答
6 条回复
Lighfer
2022-06-30 15:23:59 +08:00
啊这,markdown 格式居然样式全没了。。。
julyclyde
2022-07-01 10:01:18 +08:00
你看看 /proc/28160/fd/0 指向哪里呢?应该个 pty 吧

你说的 pst 是什么?
Lighfer
2022-07-01 22:39:55 +08:00
@julyclyde 不好意思,打错了,是 pts 。所有的 fd 都指向 /dev/pts/0 ,一层一层往上,都是这个设备。lsof 看有很多个进程的 0 1 2 都是指向这个设备
julyclyde
2022-07-02 11:14:30 +08:00
@Lighfer -t 启动容器会单独分配一个 pty 给他用的
pts 就是 pty slave 的意思

你 ssh 过去的 pts 和容器自己的 pts 当然不是同一个了

需要用 docker attach 进去
Lighfer
2022-07-03 13:32:46 +08:00
@julyclyde 这个我明白的,我疑惑的点是,当我使用`docker run -t --rm ubuntu:20.04`命令运行起这个容器时,我仍然是可以输入内容的,但是却找不到具体内容是发送到哪里的,无论在容器里的任何一个 pts 还是在宿主机的任何一个 pts ,亦或者通过 lsof 查出来相关的进程输入输出里,都找不到。
也想过是不是这个时候的输入直接被 docker 丢弃了,但是还没找到证据
当然,想这个问题可能确实有点钻牛角尖了= =。。。
julyclyde
2022-07-03 15:04:28 +08:00
@Lighfer 好像确实是个问题……
既没有-i ,也没用事后 attach ,那么应该是没有使用容器内的 pty 的
但是你也没有-d ,所以 docker 也没转入后台运行……

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/863216

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX