docker源码解析(二)
docker info函数调用逻辑
dockerd端注册docker info响应函数:
代码位于/moby/api/server/router/system/system.go
r.routes = []router.Route{
router.NewOptionsRoute("/{anyroute:.*}", optionsHandler),
router.NewGetRoute("/_ping", r.pingHandler),
router.NewHeadRoute("/_ping", r.pingHandler),
router.NewGetRoute("/events", r.getEvents),
router.NewGetRoute("/info", r.getInfo),
router.NewGetRoute("/version", r.getVersion),
router.NewGetRoute("/system/df", r.getDiskUsage),
router.NewPostRoute("/auth", r.postAuth),
}
注册函数为router.NewGetRoute(“/info”, r.getInfo),用于响应docker info命令。
当docker clinet端传入docker info命令的时候,dockerd端响应,调用r.getInfo函数。
func (s *systemRouter) getInfo(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error {}
代码位于/moby/api/server/router/system/system_routes.go
随后在该函数中调用
info := s.backend.SystemInfo()
代码位于/moby/daemon/info.go
func (daemon *Daemon) SystemInfo() *types.Info {}