Docker - 当 docker-compose.yml 中需要“tty:true”时
关于 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/
更多推荐
所有评论(0)