网站首页 > 开源技术 正文
上一篇文章介绍了runc的用法,这里面有两个非常重要的参数,Terminal和启动模式(前台启动和后台启动),下面我们就针对这两个参数,详细讲解一下。这两个参数两两组合就有四种情况。
在实验之前,我们将容器的启动脚本改成
#!/bin/sh
read input
echo “THIS IS STANDARD OUTPUT”
echo “YOU PROVIDED THIS AS STANDARD INPUT:”
echo $input
sleep 151、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.sh3、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
 
欢迎 你 发表评论:
- 1590℃北京那些看上去很牛的车牌们!(北京厉害车牌)
 - 1107℃2025年度视频去水印软件TOP5对比:哪款最值得用
 - 683℃《我的世界》不同版本的差异 ——新手向
 - 595℃新疆话里的“虫子”
 - 516℃中兴光猫 Telnet下设置大全(中兴光猫命令大全)
 - 513℃蓝牙设备配对失败的系统性解决方案与技术解析
 - 510℃未备份电脑文件数据恢复的七种方法
 - 488℃工艺管道常用英文缩写 英汉对照
 
- 最近发表
 
- 标签列表
 - 
- 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)
 
 

本文暂时没有评论,来添加一个吧(●'◡'●)