2015-08-12 20 views
5

Mogę znaleźć kontener dokowany według nazwy: docker ps --filter='name=mvn_repo'. Czy istnieje sposób (bez odwoływania się do bash/awk/grep itp.), Aby zanegować ten filtr i wyświetlić listę wszystkich kontenerów oprócz tego o podanej nazwie?Jak wyszukać pojemniki, które nie pasują do wyniku "doker ps - filtr"?

+1

Jako obejście mam powłokę: 'docker ps -aq | grep -v $ (docker ps -q --filter = 'name = mvn_repo') '. –

Odpowiedz

-1

The Docker command line reference nie wspomina o sposobie, aby to zrobić. Wnioskuję zatem, że zanegowanie filtru nie jest obecnie obsługiwane przez interfejs CLI Docker.

+1

Nie wiem, dlaczego jest to odrzucane, to było w tym czasie i pozostaje właściwą odpowiedzią na to pytanie. P: Czy negowanie obsługuje filtr? Nie. – augurar

5

Można użyć docker inspect to zrobić, stworzyłem pojemnik z --name = test111, wydaje się jak/test111, więc jeśli robię

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

ale jeśli zrobić filtr z /, więc przybierze ona

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

ja nie rozumiem.

Uznanie Adrian Mouat na swoim stanowisku odniesienia na docker skontrolować

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

I, jak mówi

„(Niestety Docker drukuje nową linię dla każdego pojemnika, czy pasuje do jeśli lub nie). " Po umieszczeniu pustej linii formatowanie zostanie utracone.

0

Przyjechałem tu próbuje dowiedzieć się podobny problem ... Nie znaleziono części roztworu w komentarzu Mykola Gurov, co ja zmodyfkowanego aby dostać się do tego:

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

rozwiązanie Mykoła jedynie działa, jeśli istnieje jedna pasuje do filtra ps dokera. Więc jeśli masz cały garść pojemników, które chcesz wykluczyć, które pasują do wzorca filtra - to się nie powiedzie, ponieważ grep może działać tylko na jednym wyrażeniu.

Dostarczone przeze mnie rozwiązanie konwertuje dane wyjściowe tego wyrażenia regularnego, a następnie używa polecenia grep z rozszerzonym wyrażeniem regularnym.

rozbicie go ...

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

produkuje wyjście tak:

d5b377495a58|2af19e0029a4 

gdzie jest to wynik każdego z identyfikatorem kontenerów dołączył z | charakteru sformułować regularne wyrażenie, które można następnie użyć z grep.

Wtedy gdy jest stosowany w podpowłoce tak z grep:

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

postanawia coś takiego:

grep -v -E d5b377495a58|2af19e0029a4 

wtedy, gdy możemy następnie potokiem wyjście docker ps -aq dostać coś takiego:

docker ps -aq | grep -v -E d5b377495a58|2af19e0029a4 
Powiązane problemy