runc的用法。这里有两个很重要的参数,Terminal和启动方式(前台启动和后台启动)。下面我们将详细解释这两个参数。这两个参数成对组合的情况有四种。实验前,我们将容器的启动脚本改为#!/bin/shreadinputecho"THISISSTANDARDOUTPUT"echo"YOUPROVIDEDTHISSASSTANDARDINPUT:"echo$inputsleep151,Terminal为true。最容易在前台启动,输入会一直挂起等待用户输入,当我输入ddd时,最后输出ddd#runcrunabcddd"THISISSTANDARDOUTPUT""YOUPROVIDEDTHISASSTANDARDINPUT:"ddd程序会一直等待15秒然后退出。2.当terminal为false,启动前台时,Terminal为false,没有作用。命令会等待15s执行,执行后输出如下:"THISISSTANDARDOUTPUT""YOUPROVIDEDTHISSASSTANDARDINPUT:""TESTINPUTFROMCOMMANDLINE"以上两种前台启动方式会启动两个进程,分别是runc和init_script脚本。$ps-f-Crunc-CshUIDPIDPPIDCSTIMETTYTIMECMDroot46004598015:42pts/000:00:00runcrunalpinecentos46094600015:42pts/000:00:00/bin/shinit_script.sh3,Terminal为false,后台启动是通过-d方式,echoDETESTINPUTFsudoruncrun-dalpine>detachedcontainer_container_.out2>&1相对于前台启动挂在那里,后台启动执行的很快,结果如下需要用户输入。如果直接在后台启动,会报如下错误。$sudoruncrun-dalpinecannotallocatettyifruncwilldetachwithoutsettingconsolesocket错误意味着需要控制台套接字。runc官方提供runc/contrib/cmd/recvtty/recvtty.go脚本。我们可以打开一个新的shell窗口并通过recvtty启动一个监听器。./recvttyalpine_container_socket.sock并通过-d启动$sudoruncrun-d--console-socketalpine_container_socket.socket.sock,然后你将在recvtty中得到以下输出:Crunc-CshUIDPIDPPIDCSTIMETTYTIMECMDcentos49161016:16pts/000:00:00/bin/shinit_script.sh
