2015-08-12 4 views
5

Я могу найти контейнер для докеров по имени: docker ps --filter='name=mvn_repo'. Есть ли способ (не прибегая к bash/awk/grep и т. Д.), Чтобы отменить этот фильтр и перечислить все контейнеры, кроме одного с указанным именем?Как искать контейнеры, которые не соответствуют результатам «docker ps --filter»?

+1

В качестве обходного решения я использую оболочку: 'docker ps -aq | grep -v $ (docker ps -q --filter = 'name = mvn_repo') '. –

ответ

-1

Docker command line reference не упоминает способ сделать это. Поэтому я заключаю, что отказ от фильтра в настоящее время не поддерживается CLI Docker.

+1

Не уверен, почему это происходит с понижением, это было в то время и остается правильным ответом на вопрос. Q: Отрицательно ли поддерживается фильтр? A: Нет. – augurar

5

Вы можете использовать docker inspect, чтобы сделать это, я создал контейнер с --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

, но если я фильтр с /, так появился

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

Я не получить его.

Престижность Адриан Муат для его опорного поста на докер инспектировать

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

И, как он говорит

«(К сожалению Docker печатает новую строку для каждого контейнера, соответствует ли это если или нет). " Если я поместил пустую строку, форматирование будет потеряно.

0

Я пришел сюда, пытаясь выяснить подобную проблему ... нашли часть решения в комментарии Николая Гурова, который я доработанную, чтобы добраться до этого:

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

решение Николай только работает, если есть один совместим с фильтром docker ps. Поэтому, если у вас есть целая куча контейнеров, которые вы хотите исключить, чтобы соответствовать шаблону фильтра, он будет терпеть неудачу, потому что grep может работать только с одним выражением.

Решение, которое я предоставил, преобразует результат этого в регулярное выражение, а затем использует grep с расширенным регулярным выражением.

Чтобы разбить его ...

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

производит такой вывод:

d5b377495a58|2af19e0029a4 

, где это результат каждого из контейнера идентификаторами вступил с | характером сформулировать регулярный выражение, которое затем можно использовать с grep.

Затем, когда используется в суб-оболочки, как это с Grep:

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

решает что-то вроде этого:

grep -v -E d5b377495a58|2af19e0029a4 

тогда, когда мы можем конвейеру выход docker ps -aq, чтобы получить что-то вроде этого:

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