网站首页 > 开源技术 正文
上一篇文章介绍了runc的用法,这里面有两个非常重要的参数,Terminal和启动模式(前台启动和后台启动),下面我们就针对这两个参数,详细讲解一下。这两个参数两两组合就有四种情况。
在实验之前,我们将容器的启动脚本改成
#!/bin/sh
read input
echo “THIS IS STANDARD OUTPUT”
echo “YOU PROVIDED THIS AS STANDARD INPUT:”
echo $input
sleep 15
1、Terminal 为 true 前台启动
这种情况最简单,input 会一直hang住等待用户的输入,当我输入ddd 后,最后输出ddd
# runc run abc
ddd
“THIS IS STANDARD OUTPUT”
“YOU PROVIDED THIS AS STANDARD INPUT:”
ddd
程序一直会等待15 秒后退出。
2、 Terminal为false前台启动
在前台启动的时候,这个Terminal 为false没啥影响
# runc run def
gg
“THIS IS STANDARD OUTPUT”
“YOU PROVIDED THIS AS STANDARD INPUT:”
gg
我们还可以通过echo 输入内容
echo “TEST INPUT FROM COMMAND LINE” |sudo runc run alpine >container.out 2>&1
上面的命令会等待15s 执行完成,执行完输出如下:
“THIS IS STANDARD OUTPUT”
“YOU PROVIDED THIS AS STANDARD INPUT:”
“TEST INPUT FROM COMMAND LINE”
上面两种前台启动的方式,会启动两个进程,分别是runc和init_script 脚本。
$ ps -f -C runc -C sh
UID PID PPID C STIME TTY TIME CMD
root 4600 4598 0 15:42 pts/0 00:00:00 runc run alpine
centos 4609 4600 0 15:42 pts/0 00:00:00 /bin/sh init_script.sh
3、Terminal为false 后台启动
后台启动通过 -d 的方式,如下
echo “TEST INPUT FOR DETACHED FROM COMMAND LINE” |sudo runc run -d alpine
> container_detached.out 2>&1
对比前台启动hang在那里,后台启动迅速执行完,结果如下
# cat container_detached.out
“THIS IS STANDARD OUTPUT”
“YOU PROVIDED THIS AS STANDARD INPUT:”
“TEST INPUT FOR DETACHED FROM COMMAND LINE”
4、Terminal为true 后台启动
由于Terminal为true,需要用户的输入,如果直接后台启动会报如下错误,
$ sudo runc run -d alpine
cannot allocate tty if runc will detach without setting console socket
错误是说,需要一个控制台socket。runc官方提供了runc/contrib/cmd/recvtty/recvtty.go的脚本。我们可以打开一个新的shell窗口,通过recvtty启动一个监听。
./recvtty alpine_container_socket.sock
然后通过-d 启动
$ sudo runc run -d --console-socket alpine_container_socket.sock alpine
然后在recvtty里面会得到如下输出
TEST INPUT FROM SOCKET
TEST INPUT FROM SOCKET
THIS IS STANDARD OUTPUT
YOU PROVIDED THIS AS STANDARD INPUT:
TEST INPUT FROM SOCKET
如果通过后台启动的话,就只有一个 init_script 脚本。
$ ps -f -C runc -C sh
UID PID PPID C STIME TTY TIME CMD
centos 4916 1 0 16:16 pts/0 00:00:00 /bin/sh init_script.sh
猜你喜欢
- 2024-10-27 什么是容器运行时?(什么是 容器)
- 2024-10-27 家庭版windows不能安装DockerDesktop的取代方案
- 2024-10-27 震惊!八岁儿子竟知道容器测评十个小知识?老爸,他开天眼了?
- 2024-10-27 红帽RHEL8和RHEL7有什么区别?(红帽8和红帽7区别大不大)
- 2024-10-27 Docker基础简介(docker通俗易懂)
- 2024-10-27 Linux命令笔记-01(linux命令教程)
- 2024-10-27 runc_page allocation failure排查
- 2024-10-27 Nvidia GPU如何在Kubernetes 里工作
- 2024-10-27 容器运行时分类(容器的运行实例)
- 2024-10-27 重学容器02: 部署容器运行时Containerd
你 发表评论:
欢迎- 最近发表
-
- 后端服务太慢?试试这 7 招(后端 服务端 区别)
- 做一个适合二次开发的低代码平台,把程序员从curd中解脱出来-1
- Caffeine缓存 最快缓存 内存缓存(caffeine缓存使用)
- Java性能优化的10大策略(java性能调优从哪几个方面入手)
- New Balance M576PGT 全新配色设计
- x-cmd pkg | qrencode - 二维码生成工具
- 平和精英抽奖概率是多少 平和精英抽奖物品一览
- x-cmd pkg | tmux - 开源终端多路复用器(terminal multiplexer)
- 漫威官方App中文版上线:全站漫画限时免费
- macOS Monterey 12.7.4 (21H1123) 正式版发布,ISO、IPSW、PKG 下载
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)