获取Docker容器名称

79

这个命令会给我一个正在运行的容器 ID 列表:

docker ps -q

有没有一个命令可以获取容器的名称列表?

7个回答

122
docker ps --format "{{.Names}}"

docker镜像列表 - Palash Roy
1
No response prompted - FARS
现在可以将此命令编写为 " docker container ls --format='{{.Names}}'; " - Allan K

17

如我之前在 "Docker.io 如何列出容器?" 中所提到的,您可以将 docker psdocker inspect 结合使用:

docker inspect --format='{{.Name}}' $(sudo docker ps -aq --no-trunc)
docker inspect --format='{{.Name}}' $(sudo docker ps -aq --no-trunc) | cut -c2-

正如Chris Stryczynski评论的,它将以'/'作为前缀打印名称。

vagrant@master:~$ docker inspect --format='{{.Name}}' $(sudo docker ps -aq --no-trunc)
/k8s_kubernetes-dashboard_kubernetes-dashboard-d9d8f48bc-vz59c_kube-system_b2abc584-730a_0
/k8s_POD_kubernetes-dashboard-d9d8f48bc-vz59c_kube-system_b2abc584-_0
/k8s_metrics-server_metrics-server-6fbfb84cdd-sjrgr_kube-system_e147bf91-7218-11e8-8266_0
/k8s_POD_metrics-server-6fbfb84cdd-sjrgr_kube-system_e147bf91-7218-11e8-8266-00155d380143_0

来自moby/moby issue 6705

Inspect公开了Docker处理容器的内部细节。
名称以其父级和/ ==“Docker守护程序”为前缀。
这就是为什么每个名称都会有这个前缀的原因。
当嵌套和多主机开始发挥作用时,这将变得更加重要。
对于inspect命令,/是正确的。

因此使用了| cut -c2-

最近(2017年6月),有一个提案(moby/moby issue 29997)建议去除/

前导斜杠存在历史原因(主要是由于遗留的容器链接)

到目前为止(2018年6月),尚未完全实施消除前导/的PR。


每个容器名称前都有一个斜杠。 - Chris Stryczynski
@ChrisStryczynski 抱歉,我当时完全错过了你的评论。我已经编辑了答案,解释了为什么有一个前导斜杠以及如何删除它。 - VonC

12

你可以使用受这个问题启发的命令来完成此操作:

docker ps -a
docker inspect --format='{{.Name}}' $(sudo docker ps -aq --no-trunc)

10

你也可以使用awk来实现:

docker ps -a | awk '{print $NF}'

$NF 表示输入的最后一列,在 docker ps -a 命令中为 Names。


然而,这也会输出列标题 - 这是不希望的。 - Javier Arias
正如@ascendants所建议的那样,要排除列标题,请使用: docker ps -a | awk '{ if( FNR>1 ) { print $NF }' FNR 表示跳过第一个条目(即列标题) - Lefteris Xris

10

3

我的需求是获取容器用户名以便登录到容器中(我需要使用docker exec -it --user来登录容器)。使用docker inspect + 容器IDgrep username,然后您就可以获取容器用户名并登录到容器中。

示例:

    # docker inspect 5791b95933ef |grep -i user

0
docker ps -a --format "{{.Names}}" --filter="id=<id>"

id 是容器的 ID。

在实例化容器时,将名称作为环境变量传递。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接