自己动手写Docker系列 -- 5.3实现logs命令查看容器日志

本文档介绍如何实现Docker的logs命令,以查看运行中的容器日志。通过重定向容器的标准输出到文件并读取日志文件内容来实现日志查看功能。文中提供源码说明,并给出了运行测试的示例。
摘要由CSDN通过智能技术生成

简介

在上篇中我们实现了查看正在运行中的容器列表,本章节我们来实现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.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值