过滤Docker容器列表时获取两个结果的技术问询
问题分析与解决
这大概率不是Docker的Bug,而是你用的容器名称过滤规则默认是模糊匹配导致的~
为什么会出现两个状态值?
Docker的--filter "name=xxx"过滤条件默认是子字符串匹配,也就是说,只要容器名称里包含containerA这个字符串,就会被筛选出来。比如如果你的系统里还有另一个容器叫containerA-dev、my-containerA甚至containerA1,这些容器都会被这个过滤条件命中,所以你执行命令后会得到两个(或更多)容器的状态值。而containerB没有其他名称包含它的容器,所以只返回一个结果。
如何验证这个猜测?
你可以先执行不带格式化的过滤命令,看看实际匹配到了多少个容器:
docker ps -a --filter "name=containerA"
如果输出里确实有两个容器,那就坐实了是模糊匹配的问题。
解决方法
这里有几种靠谱的解决方式:
使用精确匹配的过滤规则
给容器名称加上正则边界符^和$,同时注意Docker内部容器名称会带有前缀/,所以精确匹配的命令应该是:docker ps -a --filter "name=^/containerA$" --format "{{.Status}}"这样就只会匹配名称完全是
containerA的容器。通过容器ID精准查询
先获取containerA的ID:docker inspect containerA --format "{{.Id}}"然后用ID过滤(ID是唯一的,不会出错):
docker ps -a --filter "id=你拿到的容器ID" --format "{{.Status}}"直接用inspect获取状态
跳过容器列表过滤,直接查询容器的状态:docker inspect containerA --format "{{.State.Status}}"这个方法更直接,也不会有匹配错误的问题。
内容的提问来源于stack exchange,提问作者zephirus
相关产品推荐
相关产品推荐

