python docker client仅列出正在运行的容器

时间:2019-01-22 10:55:39

标签: python docker

我面临一个奇怪的问题。我有3个这样的docker容器-

root@dimension-VirtualBox:/home/dimension/neo4j# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS                                                      NAMES
eee581b2f493        neo4j:3.3.3         "/docker-entrypoint.…"   3 months ago        Up 22 minutes               0.0.0.0:7474->7474/tcp, 7473/tcp, 0.0.0.0:7687->7687/tcp   skill-ontology
bb99a4eb65ad        neo4j:3.3.3         "/docker-entrypoint.…"   3 months ago        Exited (0) 22 minutes ago                                                              skill-ontology-old
2a3a1e300782        neo4j:3.3.3         "/docker-entrypoint.…"   3 months ago        Exited (0) 30 hours ago                                                                romantic_mccarthy

我写了一个简单的python脚本,使用docker的python库列出了我的docker容器。我正在使用docker==3.7.0版的图书馆。这是我的代码。我正在使用ubuntu 18.04机器

import docker
# same result with below line
#cli = docker.client.DockerClient(base_url='tcp://127.0.0.1:2375')
cli = docker.DockerClient(base_url='tcp://127.0.0.1:2375')
containers = cli.containers.list()

cont =containers[0]
print(len(containers))
print(cont.short_id)

结果是

1
eee581b2f4

它输出1作为输出,但应该打印3。

我在ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock中将我的ExecStart参数设置为/lib/systemd/system/docker.service file

我是否需要以某种不同的方式连接到docker,以便获取我所有docker容器的信息。

2 个答案:

答案 0 :(得分:2)

尝试:

containers = cli.containers.list(all=True)

从文档中

list(**kwargs)

List containers. Similar to the docker ps command.
Parameters: 

    all (bool) – Show all containers. Only running containers are shown by default

https://docker-py.readthedocs.io/en/stable/containers.html#docker.models.containers.ContainerCollection.list

答案 1 :(得分:1)

好的是:

stopped_docker_container = cli.containers.list(all=True, filters={'name':'stopped_container_name'})

将已停止的容器显示为

stopped_docker_container = cli.containers.list(filters={'name':'stopped_container_name'})

不会显示已停止的容器。

在文档中不清楚,但是关键是

cli.containers.list(all = True)

感谢@Dmytro Prylipko