dockerd/daemon.go start()

loadDaemonCliConfig(opts) 里
daemon.MergeDaemonConfigurations(config, flags, opts.configFile)将配置文件设置的参数和命令参数合并。
过了好多代码,感觉都是配置啥的就不看具体干啥了。

setDefaultUmask() 设置umask 0022,把goup和other的写权限干掉了。

daemon.CreateDaemonRoot(cli.Config)
先获取docker daemon根目录 默认/var/lib/docker

setupRemappedRoot 根据配置映射容器用户和组的
这个参数默认是空的,也就是不映射
如果设置了这个参数
parseRemappedRoot就是解析参数的,有四种格式
username
username:groupname
uid
uid:gid
然后解析/etc/passwd和/etc/group看看参数对不对。其中解析是否是defaultIDSpecifier 就是个'default',然后映射的host用户为dockremap。
也就是RemappedRoot这个参数传个default就行了,使用docker创建好的账户
idtools.AddNamespaceRangesUser(defaultRemappedID)就是判断是否有default的用户,没有就创建
uidMaps, gidMaps, err = idtools.CreateIDMappings(username, groupname) 这个从/etc/subuid和/etc/subgid获取,根据username判断是第一个
startid是uid是第二个,length还不知道干啥的第三个
ALL不知道干啥的 返回了所有的行,就是所有用户
createIDMap返回IDMap,ContainerID开始是0然后后边的都加length。hostid,就是第二个startid, size 是length.
然后setupRemappedRoot就完了,返回了俩idmap

idtools.GetRootUIDGID(uidMaps, gidMaps)
里边就一个ToHost(0, uidMap)这个单个的时候就是返回之前的hostid就是startid对应host上的uid, 之前的ALL的话,好像还是只返回了第一个的hostid

setupDaemonRoot(config, realRoot, rootUID, rootGID)
修改docker的根目录权限为711
RemappedRoot 为空就直接返回了。不空的话创建一个config.Root目录在docker根目录下。目录名为rootUID.rootGID,权限700.然后好像判断目录下的rootUID都有访问权限,这个应该是为已经有这个目录的判断

然后CreateDaemonRoot完结撒花,设置了一下目录,用户的映射

上一篇:
下一篇:

相关文章:

Categories: 博客记录

0 Responses so far.

Leave a Reply