Я могу найти контейнер для докеров по имени: docker ps --filter='name=mvn_repo'
. Есть ли способ (не прибегая к bash/awk/grep и т. Д.), Чтобы отменить этот фильтр и перечислить все контейнеры, кроме одного с указанным именем?Как искать контейнеры, которые не соответствуют результатам «docker ps --filter»?
ответ
Docker command line reference не упоминает способ сделать это. Поэтому я заключаю, что отказ от фильтра в настоящее время не поддерживается CLI Docker.
Не уверен, почему это происходит с понижением, это было в то время и остается правильным ответом на вопрос. Q: Отрицательно ли поддерживается фильтр? A: Нет. – augurar
Вы можете использовать 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 печатает новую строку для каждого контейнера, соответствует ли это если или нет). " Если я поместил пустую строку, форматирование будет потеряно.
Я пришел сюда, пытаясь выяснить подобную проблему ... нашли часть решения в комментарии Николая Гурова, который я доработанную, чтобы добраться до этого:
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
В качестве обходного решения я использую оболочку: 'docker ps -aq | grep -v $ (docker ps -q --filter = 'name = mvn_repo') '. –