V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Lighfer
V2EX  ›  问与答

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

  •  
  •   Lighfer · 2022-06-30 15:23:31 +08:00 · 937 次点击
    这是一个创建于 877 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    6 条回复    2022-07-03 15:04:28 +08:00
    Lighfer
        1
    Lighfer  
    OP
       2022-06-30 15:23:59 +08:00
    啊这,markdown 格式居然样式全没了。。。
    julyclyde
        2
    julyclyde  
       2022-07-01 10:01:18 +08:00
    你看看 /proc/28160/fd/0 指向哪里呢?应该个 pty 吧

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

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

    需要用 docker attach 进去
    Lighfer
        5
    Lighfer  
    OP
       2022-07-03 13:32:46 +08:00
    @julyclyde 这个我明白的,我疑惑的点是,当我使用`docker run -t --rm ubuntu:20.04`命令运行起这个容器时,我仍然是可以输入内容的,但是却找不到具体内容是发送到哪里的,无论在容器里的任何一个 pts 还是在宿主机的任何一个 pts ,亦或者通过 lsof 查出来相关的进程输入输出里,都找不到。
    也想过是不是这个时候的输入直接被 docker 丢弃了,但是还没找到证据
    当然,想这个问题可能确实有点钻牛角尖了= =。。。
    julyclyde
        6
    julyclyde  
       2022-07-03 15:04:28 +08:00
    @Lighfer 好像确实是个问题……
    既没有-i ,也没用事后 attach ,那么应该是没有使用容器内的 pty 的
    但是你也没有-d ,所以 docker 也没转入后台运行……
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2667 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 05:13 · PVG 13:13 · LAX 21:13 · JFK 00:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.