bash – Docker中终端内线路的Docker数量
我想知道如何更改以下行为。假设我的终端有28条线路。然后我使用以下命令:
$ tput lines # my terminal 28 $ docker run --rm -it ubuntu:16.04 tput lines # docker container 24 ## WHY?? $ docker run --rm -it ubuntu:16.04 bash # docker container inside command root@810effa2777c:/# tput lines 28 正如你所看到的,即使所有结果都应该是28,当我将容器称为docker run –rm -it ubuntu:16.04 tput lines时,尽管我的终端大小,它总是给我24。这不仅仅是ubuntu容器,我也试过debian(docker run –rm -it debian tput lines)并且我得到的结果相同24。 这样做的目的是使用mdp presentation tool,它考虑了终端中的线路。当我的实现失败时,我尝试了其他人的docker implementation,但我遇到了同样的错误。 这是我在图像中的错误: 有没有人知道它可能是什么以及如何解决这个问题?
Ubuntu Dockerfile包括:
CMD ["/bin/bash"] 这意味着默认的ENTRYPOINT是sh -c(我怀疑tput线在sh会话中运行良好,因为tput使用terminfo数据库,可能只为该图像中的bash设置) 您可以尝试用bash -c覆盖ENTRYPOINT并检查它是否更好。 但是,从命令行起,这不起作用: docker run --entrypoint /bin/bash --rm -it ubuntu:16.04 -i -c 'tput lines' 24 我将检查定义自定义图像的选项。 FROM ubuntu:16.04 ENTRYPOINT ["/bin/bash","-c"] 结果是相同的: docker run --rm -it u 'tput lines' 24 但这“有效”: FROM ubuntu:16.04 ENTRYPOINT [ "/bin/bash" ] 附: docker@default:/c/Users/vonc/prog/testsu$ docker run --rm -it u -i -c 'ls; tput lines' bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var 48 可能存在同步问题,因为同一命令会不时返回24。 实际上,以下内容始终返回“not 24”: FROM ubuntu:16.04 ENTRYPOINT [ "/bin/bash","-l","-i","-c" ] docker run --rm -it u -c 'sleep 0.1; ls; tput lines' 48 OP silgon建议in the comments: docker run --rm -it --entrypoint /bin/bash ubuntu:16.04 -c "sleep 0.1 && tput lines" 截至BMitch评论below:
这给了我另一个想法: docker@default:/c/Users/vonc/prog/testsu$ docker run --entrypoint='/bin/bash' --name ub -d -it ubuntu:16.04 0d9b8783afbb5e3ff4232da071d3f357985351ea1ce4d142bf6617ac456fb76b docker@default:/c/Users/vonc/prog/testsu$ d attach ub root@0d9b8783afbb:/# tput lines 48 root@0d9b8783afbb:/# exit exit docker@default:/c/Users/vonc/prog/testsu$ drmae 0d9b8783afbb5e3ff4232da071d3f357985351ea1ce4d142bf6617ac456fb76b 附加会话中的输入行正常工作。 thajeztah添加in the comments:
请参见“Resize a container TTY”API。 DEBU[0244] Calling POST /v1.25/containers/c42fd5c4eb79c06fd7f9912b8359022f7d93887afbb33b57a67ed8bb7bfee4??3a/resize?h=46&w=221 有关更多信息,请参阅docker issue 25450。
OP silgon指出了 // Telling the Windows daemon the initial size of the tty during start makes // a far better user experience rather than relying on subsequent resizes // to cause things to catch up. if runtime.GOOS == "windows" { hostConfig.ConsoleSize[0],hostConfig.ConsoleSize[1] = dockerCli.GetTtySize() } 有逻辑的问题:
Kenfe-Micka?l Laventure ( (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |