关于 docker-compose.yml 中的“tty: true”

在 docker-compose.yml 中,我不确定“tty: true”是如何工作的,所以我查了一下。

** docker-compose.yml 中的“tty: true”是什么? |通过 KeisukeKoshikawa |中等的**

https://kossy0701.medium.com/what-is-tty-true-in-docker-compose-yml-47a72891aee2

如果您在 docker-compose.yml 中写入“tty: true”,您将能够“保持容器运行”。

他说,当容器通过“docker-compose up -d”启动时,容器立即终止。

您需要一个名为“tty: true”的选项来保持容器运行。

“tty”似乎与 Linux 命令相同。

什么是 tty?

伪终端(也称为 tty 或 pts )将用户的“终端”与标准输入和标准输出流连接起来,通常(但不一定)通过诸如 bash 之类的外壳。

... 对于 docker,当您以交互模式运行进程时,例如启动 bash shell 时,您通常会同时使用 -t 和 -i。

这个解释比较简单。

** 什么是 tty [命令]?

什么是tty?|即使不懂也让你觉得懂的IT词典

https://wa3.i-3-i.info/word11668.html

“tty”命令用于从命令行获取连接终端的设备文件名。

(“tty”命令用于从命令行获取连接终端的设备文件名。)

我知道保持容器运行是必要的,但是语法是有问题的,为什么要使用“启用标准输出”设置来使容器持久运行。

最好只使用“永久:真实”或类似的东西。

实际行为:某些容器无需“tty:true”即可访问

“然后,要访问容器(以便它们不会立即终止),请写入 'tty: true'。”

但是,在 docker-compose.yml 中有一些容器实际上可以在没有这种语法的情况下访问。

例如:

码头工人-compose.yml

version: "3"

services:
  php:
    image: php:8.0-fpm

  node:
    image: node:16-slims

进入全屏模式 退出全屏模式

运行命令

docker-compose up -d

进入全屏模式 退出全屏模式

登录命令

docker-compose exec php bash
docker-compose exec node bash

进入全屏模式 退出全屏模式

它可以访问php,但无法访问节点。

两者都没有“tty:true”。

我想如果上面的解释是正确的,那么两个进程都会在容器启动后立即终止,并且都无法访问。

但显然不是。

我的意思是,我记得 nginx、mysql 和 redis 没有语法“tty: true”。

需要大小写“tty: true”。

我调查了这个并找到了这个信息。

在 docker-compose 中设置 tty: true 以保持容器在没有守护程序的情况下运行

在 docker-compose 中设置“tty: true”以在没有守护程序的情况下继续运行 docker 容器。

https://imagawa.hatenadiary.jp/entry/2019/07/31/65830

顺便说一下,我没有创建进程来运行mysql或redis之类的守护进程,所以我以为它会结束而没有任何继续工作,所以我查了一下,似乎设置值 tty: true 可以写在 docker-compose.yml 中。

(我还没有创建在 mysql 或 redis 之类的守护进程上运行的进程,所以我认为它会终止。因为没有任务了。

为了避免这种情况,我发现了 docker-compose.yml 中的设置值 'tty: true'。)

如何让 docker-compose up 容器保持运行

如何使用 'docker-compose up' 继续运行容器

https://qiita.com/sekitaka_1214/items/2af73d5dc56c6af8a167

我认为如果你用 docker-compose up 启动一个不监听端口的容器,容器会立即结束。

(如果您使用 'docker-compose up' 在不等待端口的情况下运行容器,容器将立即终止。)

如果守护进程在容器中,即使您没有在 docker-compose.yml 中编写任何特殊内容,它也会继续运行。

然后,我觉得“添加'tty:true'使其永久化”是一种棘手的方法,而不是一种简单的方法。

如果容器有守护进程,则在 docker-compose.yml 中不需要“tty: true”。

否则,docker-compose.yml 中需要“tty: true”。

所以,上面的 docker-compose.yml 需要节点的“tty: true”。

码头工人-compose.yml

version: "3"

services:
  php:
    image: php:8.0-fpm

  node:
    image: node:16-slims
    tty: true

进入全屏模式 退出全屏模式

顺便说一句,“node:16-slims”是 Node.js 轻量级包。

如需更多信息,请访问官网。

节点:-苗条

此镜像不包含默认标签中包含的常用包,仅包含运行node所需的最少包。除非您在仅部署node镜像的环境中工作并且您有空间限制,否则我们强烈建议使用此存储库的默认映像。

额外

我用“tty:false”运行它。

这是 docker-compose.yml。

码头工人-compose.yml

version: "3"

services:
  php:
    image: php:8.0-fpm
    tty: false

  node:
    image: node:16-slim
    tty: false

进入全屏模式 退出全屏模式

结果

  • php - 可访问

  • 节点 - 无法访问

即使添加了“tty:false”,在带有守护进程的容器的情况下,似乎也不会切断访问路径。

我认为它的自然行为是“容器启动时,容器立即终止”。或“容器正在运行,但无法访问。”

但事实并非如此。

Docker 对我们来说太神秘了。

参考

日文版

https://kaki-note-02.netlify.app/2022/04/07/

Logo

云原生社区为您提供最前沿的新闻资讯和知识内容

更多推荐