如何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。