[英]how to redirect ps command in linux to look into other folder than /proc
[英]Where does docker ps Command look for current containers?
我需要知道它是如何工作的以及它如何找到当前容器以及默认情况下它在哪里查找容器。
不要误解这个问题。 我对 docker ps 命令非常熟悉。
需要这样做是为了能够在运行时摄取其他容器而守护程序不会注意到差异。
TLDR; docker 守护进程将容器列表保存在内存中。
在docker ps
,不需要文件系统访问。
在docker create/run/start
,可以从/var/lib/docker/aufs
的层派生容器列表(如果您使用的是aufs 存储驱动程序)
容器本身在/var/lib/docker/containers/{id}
如问题 15047 所示,该路径在docker守护进程启动时加载。 之后,这是在内存中管理的。
docker ps
在api/client/ps.go#L59
请求容器:
containers, err := cli.client.ContainerList(options)
它询问api/client/lib/container_list.go#L45
resp, err := cli.get("/containers/json", query, nil)
在api/server/router/container/container.go#L34
local.NewGetRoute("/containers/json", r.getContainersJSON),
然后它在api/server/router/container/container_routes.go#L48
询问后端
containers, err := s.backend.Containers(config)
这是api/server/router/container/backend.go#L58
一个接口
Containers(config *daemon.ContainersConfig) ([]*types.Container, error)
由daemon/list.go#L83-L86
守护进程实现:
// Containers returns the list of containers to show given the user's filtering.
func (daemon *Daemon) Containers(config *ContainersConfig) ([]*types.Container, error) {
return daemon.reduceContainers(config, daemon.transformContainer)
}
守护进程有容器列表: daemon/list.go#L37-L40
// List returns an array of all containers registered in the daemon.
func (daemon *Daemon) List() []*container.Container {
return daemon.containers.List()
}
从contStore
: daemon/daemon.go#L123-L132
func (c *contStore) List() []*container.Container {
containers := new(History)
c.Lock()
for _, cont := range c.s {
containers.Add(cont)
}
c.Unlock()
containers.sort()
return *containers
}
type contStore struct {
s map[string]*container.Container
sync.Mutex
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.