这个命令会给我一个正在运行的容器 ID 列表:
docker ps -q
有没有一个命令可以获取容器的名称列表?
docker ps --format "{{.Names}}"
如我之前在 "Docker.io 如何列出容器?" 中所提到的,您可以将 docker ps
与 docker 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
Inspect公开了Docker处理容器的内部细节。
名称以其父级和/
==“Docker守护程序”为前缀。
这就是为什么每个名称都会有这个前缀的原因。
当嵌套和多主机开始发挥作用时,这将变得更加重要。
对于inspect命令,/
是正确的。
因此使用了| cut -c2-
。
最近(2017年6月),有一个提案(moby/moby issue 29997)建议去除/
:
前导斜杠存在历史原因(主要是由于遗留的容器链接)
到目前为止(2018年6月),尚未完全实施消除前导/
的PR。
你可以使用受这个问题启发的命令来完成此操作:
docker ps -adocker 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 表示跳过第一个条目(即列标题) - Lefteris Xrisdocker ps -a --format "table {{.ID}}\t{{.Names}}"
下面是有关ps命令更多信息的参考链接 https://docs.docker.com/engine/reference/commandline/ps/
我的需求是获取容器用户名以便登录到容器中(我需要使用docker exec -it --user
来登录容器)。使用docker inspect
+ 容器ID
和grep
user
或name
,然后您就可以获取容器用户名并登录到容器中。
示例:
# docker inspect 5791b95933ef |grep -i user
docker ps -a --format "{{.Names}}" --filter="id=<id>"
id 是容器的 ID。
在实例化容器时,将名称作为环境变量传递。