当前位置: 首页 > 知识库问答 >
问题:

为什么用-t运行Docker容器?

凤凡
2023-03-14

但是只有使用-i运行它才允许用户通过终端与容器化进程交互。所以我想知道,“分配一个伪tty”是什么意思,因为即使在没有-t的情况下运行,进程写入stdout的内容也会传递到终端(进程将有一个管道作为stdout,而不是tty)?

我读到这个答案说,您可以运行Docker run-t来获得“终端支持”,例如文本着色等。我已经做了以下实验:

// Dockerfile

FROM ubuntu:latest

CMD ["echo", "-e", "\u001b[31mHello World"]

并运行此映像,不使用-t。因为我是从终端运行它(Docker run总是从某个终端运行,不是吗?)我能看到一个红色的“你好世界”。所以我还是不明白为什么要单独用-t运行...

共有1个答案

岳城
2023-03-14

您的测试显示,颜色代码仍然有效,但缺少的是,如果没有-t,许多程序将停止尝试发送颜色代码。

许多程序检查C语言中的isatty(3)或shell脚本中的[-t0]以查看它们是否连接到TTY。如果是这样的话,他们将启用交互式功能,如颜色和线条编辑,使体验更愉快。

您可以使用Bash这样的shell和vim这样的文本编辑器来见证这一点。像ls、grep和git这样的程序有“自动”颜色模式,只交互使用ANSI颜色代码。如果省略-t,它们将恢复为明文。

 类似资料:
  • 我正在创建一个docker映像,我想在其中挂载我的主目录。然而,我希望在实例化时运行其他一些文件。 问题是我不能复制这个文件到我的用户的工作目录,因为那是我将挂载我的(主机)主目录。我尝试过将其附加到或放入 /etc/profile.d但它从未运行过。 我的dockerfile看起来像这样: 我现在构建并运行这个容器,同时挂载我的主目录: 当我打开控制台时,只有(mounted).bashrc运行

  • 我正在尝试使用这张图片https://hub.docker.com/r/ibmcom/cloudant-developer/对于docker compose,当我使用原始指令时,它可以工作,但是当我将其转换为docker compose格式时,它无法正常工作,我看到了仪表板页面,但它是空的,似乎已损坏。 原始运行命令: 我创建的撰写文件: 谢谢你的帮助。 另外,我确实手动执行了许可协议的命令

  • 我使用以以下命令开头mysql映像 当docker在后台运行时,另一个应用程序连接到端口3306大约需要一分钟的时间。 之后,我用停止这个容器,然后用启动它。在第二种情况下,使用start命令,应用程序可以连接到端口3306,仅在5秒后。 现在我用从停止的容器中获取快照,并用运行它,但是在这种情况下,应用程序可以在一分钟后连接到mysql2! 所以, 是否有任何方法在运行容器后采取快照,可以在10

  • 我找到了很多关于如何在中运行的博客,但没有一个真正解释这样做的好处。 1)我希望服务器的大部分配置都在版本控制之下。 2)当我尝试新功能或配置时,我希望能够在我的计算机上本地运行构建服务器 3)我希望能够轻松地在一个新的环境中建立一个构建服务器(例如。在本地服务器上,或在云环境(如AWS)中)

  • 我从Fedora通过Dockerfile制作了一个简单的图像(最初为320 MB)。 添加了Nano(这个1MB大小的微小编辑器),图像的大小上升到了530MB。我在上面添加了Git(大约30 MB),然后我的图像大小的sky-rockets达到了830 MB。 这不是疯了吗? 我已经尝试导出和导入容器来删除历史/中间图像。这一努力节省了25 MB,现在我的图像大小是804 MB。我也尝试在一个上

  • 我使用Win 10 Pro N(版本1709)作为开发机器,使用Windows Server 2016 Standard(版本1607)作为生产服务器。 我目前正在开发一个使用MongoDb作为数据库的ASP.NET Core2应用程序。 几天前,我第一次偶然发现了这个想法,将MongoDb作为Docker映像运行。 这是个好决定吗?或者在我的场景中我应该使用Linux容器而不是Windows容器