如何search不符合“docker ps –filter”结果的容器?

我可以通过名称find一个docker ps --filter='name=mvn_repo'容器: docker ps --filter='name=mvn_repo' 。 有没有一种方法(而不是诉诸bash / awk / grep等)取消这个filter,并列出所有的容器,除了名称?

你可以使用docker inspect来做到这一点,我创build了一个容器–name = test111,它显示为/ test111,所以如果我做

docker inspect -f '{{if ne "test111" .Name }}{{.Name}} {{ end }}' $(docker ps -q) /test111 /sezs /jolly_galileo /distracted_mestorf /cranky_nobel /goofy_turing /modest_brown /serene_wright /fervent_lalande

但是如果我用/做一个filter,那么它就成了

docker inspect -f '{{if ne "/test111" .Name }}{{.Name}} {{ end }}' $(docker ps -q) /sezs /jolly_galileo /distracted_mestorf /cranky_nobel /goofy_turing /modest_brown /serene_wright /fervent_lalande

我不明白。

荣誉Adrian Mouat在docker检查的参考职位

http://container-solutions.com/docker-inspect-template-magic/

而且,正如他所说

“(不幸的是,Docker会为每个容器打印一个新行,不pipe它是否匹配)。” 如果我把一个空白行格式化丢失。

我来到这里试图找出一个类似的问题…find了Mykola Gurov的解决scheme的一部分,我修改了这个解决scheme:

 docker ps -aq | grep -v -E $(docker ps -aq --filter='name=mvn_repo' | paste -sd "|" -) 

如果与Docker PSfilter匹配,Mykola的解决scheme才有效。 所以,如果你有一大堆容器,你想排除匹配一个filter模式 – 它会失败,因为grep只能在一个expression式上工作。

我提供的解决scheme将其输出转换为正则expression式,然后使用扩展正则expression式的grep。

打破它…

 docker ps -aq --filter='name=mvn_repo' | paste -sd "|" - 

产生这样的输出:

 d5b377495a58|2af19e0029a4 

这是每个容器ID与| 字符来制定一个正则expression式,然后可以使用grep。

然后当在这样的子shell中使用grep时:

 grep -v -E $(docker ps -aq --filter='name=mvn_repo' | paste -sd "|" -) 

解决这样的事情:

 grep -v -E d5b377495a58|2af19e0029a4 

那么当我们可以pipe道docker ps -aq的输出来获得这样的东西:

 docker ps -aq | grep -v -E d5b377495a58|2af19e0029a4 

Docker命令行参考没有提到这样做的方法。 因此,我得出结论:取消filter目前不支持Docker CLI。