У меня есть именованный контейнер, который может быть или не работать, и если он работает, я хочу иметь возможность убить все контейнеры, кроме этого, по имени. В основном я хочу:
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