Назад | Перейти на главную страницу

Не логика в фильтре докеров

У меня есть именованный контейнер, который может быть или не работать, и если он работает, я хочу иметь возможность убить все контейнеры, кроме этого, по имени. В основном я хочу:

docker kill $(docker ps -aq --filter="name!=<container-name>")

к сожалению, внутренняя команда docker ps вызывает ошибку:

Ответ демона об ошибке: Неверное имя фильтра!

Я попытался получить аналогичный результат с помощью grep -v:

docker kill $(docker ps -q | grep -v $( docker ps -q -f name=<container-name>))

Проблема в том, что если контейнер не работает (что вполне может быть), то «docker ps -q -f name =» ничего не возвращает, а grep не работает без шаблона, поэтому все это не работает.

Какие-либо предложения?

Из документации, фильтр поддерживает только type=value обозначение с ps команда. Чтобы обработать сценарий, в котором контейнер может не существовать, вы можете использовать if / else:

if [ -n "$( docker ps -q -f name=<container-name>)" ]; then
  docker kill $(docker ps -q | grep -v $( docker ps -q -f name=<container-name>))
else
  docker kill $(docker ps -q)
fi