简介
在上篇中我们实现了查看正在运行中的容器列表,本章节我们来实现logs命令,来查看正在运行中的容器的运行日志
源码说明
同时放到了Gitee和Github上,都可进行获取
本章节对应的版本标签是:5.3,防止后面代码过多,不好查看,可切换到标签版本进行查看
代码实现
实现该功能的主要思路如下:
1 日志的保存:在使用-d后台运行的时候,我们将文件的输出重定向到文件中,这样就将日志保存到了文件中,提供给后面查看
2 日志的查看:在日志运行过程中,文件已保存到约定的目录,我们只需要读取日志文件内容进行显示即可
运行日志的保存
我们约定将日志文件保存到指定位置
如下,在容器配置中,新增日志文件名称,这样日志文件对应的路径就是:/var/run/mydocker/{容器名}/container.log
var (
RUNNING = "running"
STOP = "stop"
EXIT = "exited"
DefaultInfoLocation = "/var/run/mydocker/%s/"
ConfigName = "config.json"
ContainerLogFile = "container.log"
)
然后将后台运行的容器的输出定向输入到文件中
在启动的时候,将容器名称传递进去,如果没有的话,随机生成(在以前章节中已实现)
func Run(tty, detach bool, cmdArray []string, config *subsystem.ResourceConfig, volume, containerName string) {
pwd, err := os.Getwd()
if err != nil {
log.Errorf("Run get pwd err: %v", err)
return
}
mntUrl := pwd + "/mnt/"
rootUrl := pwd + "/"
// 传入容器名
parent, writePipe := container.NewParentProcess(tty, containerName, rootUrl, mntUrl, volume)
if err := parent.