【发布时间】:2015-10-31 11:03:44
【问题描述】:
这个命令给了我一个running容器IDs的列表:
docker ps -q
有没有获取容器名称列表的命令?
【问题讨论】:
标签: linux docker containers
这个命令给了我一个running容器IDs的列表:
docker ps -q
有没有获取容器名称列表的命令?
【问题讨论】:
标签: linux docker containers
docker ps --format "{{.Names}}"
【讨论】:
您可以将docker ps 与docker inspect 结合使用,正如我之前在“How do you list containers in Docker.io?”中提到的:
docker inspect --format='{{.Name}}' $(sudo docker ps -aq --no-trunc)
docker inspect --format='{{.Name}}' $(sudo docker ps -aq --no-trunc) | cut -c2-
作为Chris Stryczynski 的commented,它将打印带有“/”作为前缀的名称。
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
Inspect 揭示了 docker 如何处理容器的内部细节。
名称以它们的父级和/== “docker daemon”为前缀。
这就是为什么每个名字都会有这个前缀的原因。
当嵌套和多主机发挥作用时,这将更加重要。/对于检查命令是正确的。
因此| cut -c2-。
最近(2017 年 6 月),有一个提议 (moby/moby issue 29997) 删除“/”:
由于历史原因(主要是由于旧的容器链接),存在前导斜线
到目前为止(2018 年 6 月),还没有完全实施 PR 来摆脱领先的“/”。
【讨论】:
你可以用这个受this question启发的命令来做到这一点:
docker inspect --format='{{.Name}}' $(sudo docker ps -aq --no-trunc)
【讨论】:
你也可以用 awk 来做:
docker ps -a | awk '{print $NF}'
$NF表示输入的最后一列,在docker ps -a命令中为Names。
【讨论】:
docker ps -a | awk '{ if( FNR>1 ) { print $NF }' FNR 表示跳过第一个条目(列标题)
您可以使用以下命令显示容器名称
docker ps -a --format "table {{.ID}}\t{{.Names}}"
这里是有关 ps 命令的更多信息的参考链接 https://docs.docker.com/engine/reference/commandline/ps/
【讨论】:
我的要求是获取 容器用户名 来登录容器(我需要使用docker exec -it --user 来登录容器)。使用docker inspect + container id 和grep user 或name 即可获取容器用户名并登录容器。
例子:
# docker inspect 5791b95933ef |grep -i user
【讨论】: