docker ps Command在哪里查找当前容器?

时间:2015-12-22 13:42:34

标签: ubuntu docker

我需要知道它是如何工作的以及它如何找到当前容器以及它默认查找容器的位置。

不要错误地理解这个问题。 我对docker ps命令非常熟悉。

需要这个,以便能够在运行时间内摄取其他容器,而守护进程没有注意到差异。

1 个答案:

答案 0 :(得分:2)

TLDR; docker守护程序将容器列表保存在内存中 在docker ps上,不需要文件系统访问 在docker create/run/start上,容器列表可以从/var/lib/docker/aufs中找到的图层派生(如果您使用的是aufs storage driver

https://github.com/docker/docker/raw/83f28cb374f6e08e2e929ea86833c0976ce47cf3/docs/userguide/storagedriver/images/container-layers.jpg

容器本身位于/var/lib/docker/containers/{id}下 由于issue 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中的docker守护程序实现:

// 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()
}

来自contStoredaemon/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
}