Подтвердить что ты не робот

Остановка контейнеров-докеров по имени изображения, а также отсутствие ошибок при отсутствии контейнеров

В этом question объясняется, как остановить контейнеры Docker с изображения.

Но если нет запущенных контейнеров, я получаю сообщение об ошибке для остановки докеры требуется минимум один аргумент. Это означает, что я не могу запустить эту команду в длинном .sh script, не нарушая ее.

Как изменить эти команды для работы, даже если результаты не найдены?

docker stop $(docker ps -q --filter ancestor="imagname")
docker rm `docker ps -aq` &&

(Я ищу чистый ответ Docker, если это возможно, а не тест bash, поскольку я запускаю мой script поверх ssh, поэтому я не думаю, что у меня есть доступ к обычным тестам script).

4b9b3361

Ответ 1

Поместите это, если мы сможем помочь другим:

Чтобы остановить контейнеры с использованием определенного изображения:

docker ps -q --filter ancestor="imagename" | xargs -r docker stop

Чтобы удалить выгруженные контейнеры:

docker rm -v $(docker ps -a -q -f status=exited)

Чтобы удалить неиспользуемые изображения:

docker rmi $(docker images -f "dangling=true" -q)

Если вы используете Docker > 1.9:

docker volume rm $(docker volume ls -qf dangling=true)

Если вы используете Docker <= 1.9, используйте это вместо:

docker run -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/docker:/var/lib/docker --rm martin/docker-cleanup-volumes

Обновление Docker 1.13:

Чтобы удалить неиспользуемые изображения:

docker image prune

Чтобы удалить неиспользуемые контейнеры:

docker container prune

Чтобы удалить неиспользуемые тома:

docker volume prune

Чтобы удалить неиспользуемые сети:

docker network prune

Чтобы удалить все неиспользуемые компоненты:

docker system prune

ВАЖНО: убедитесь, что вы понимаете команды и сохраняете важные данные перед выполнением этого в процессе производства.