2016-11-27 5 views
1

У нас есть сценарий, в котором мы создаем продукт, который использует несколько изображений докеров и контейнеров. Наша среда Jenkins создает отдельные компоненты, упаковывает их в контейнеры, а затем (обычно) развертывает их для проверки экземпляров. К сожалению, заставить эти тестовые экземпляры быть чистыми, стало проблемой, что у меня проблемы с решением проблемы.Очистка контейнеров-докеров через оболочку jenkins на подчиненном устройстве

Рабочие являются ubuntu 14.04 и 16.04 LTS. Docker - самая последняя стабильная версия для этих сборников (1.12.3). . Предположим, что пользователь jenkins правильно вставлен в подчиненное устройство и имеет разрешения sudo через файл sudoers для запуска команд docker. Пользователь также находится в группе докеров. Так как мы начинаем с управлением набором контейнеров, созданных с помощью DOCKER-композа, мы остановить контейнеры как сценарий оболочки Jenkins, начиная с

DOCKER-композом остановкой

Затем удалить эти контейнеры и связанные с ними объемы с

docker-compose rm -fv

Теперь пришло время удалить изображения, потому что мы собираемся ударить новый набор изображений на их место. Здесь мой код развился, но он не сработал.

В настоящее время я сделать следующее:

dockerimagesoutput="$(sudo docker images -q | sort | uniq)" 
if [ ! -z "$dockerimagesoutput" ]; then 
    sudo docker rmi "${dockerimagesoutput}" 
    fi 

Когда это работает на подчиненном, я ветер с

sudo docker images -q 
+ sort 
+ uniq 
+ dockerimagesoutput=01b1b8ea71f4 
027c45033c40 
0b17fb320c4f 
182d60ace820 
19a515d76e88 
. 
. 
. 
c10984351e73 
c2c4b1989875 
c95d5afc74e2 
ca82cd3aa0d4 
d0521df160d4 
d99ef18f88fd 
e01106d204cb 
e0b4f8e0248d 
f0a4e63c158c 
f14a297b157d 
f7dbb67755a8 
fe35996d49e9 
ff1f30708195 
+ [ ! -z 01b1b8ea71f4 
027c45033c40 
0b17fb320c4f 
182d60ace820 
19a515d76e88 
27f52880c6e2 
2af6e3c3e3d7 
. 
. 
. 
8d6bfee5cecd 
8f244f8ae3db 
8f72d2d366e9 
9393b391526a 
97f2023dcc65 
a4d2bb5d4d52 
ab4148bd2fb9 
aee91e3b71a7 
b34b797e9fe6 
b4d1c74da310 
c10984351e73 
c2c4b1989875 
c95d5afc74e2 
ca82cd3aa0d4 
d0521df160d4 
d99ef18f88fd 
e01106d204cb 
e0b4f8e0248d 
f0a4e63c158c 
f14a297b157d 
f7dbb67755a8 
fe35996d49e9 
ff1f30708195 ] 
+ sudo docker rmi 01b1b8ea71f4 
027c45033c40 
0b17fb320c4f 
182d60ace820 
19a515d76e88 
27f52880c6e2 
2af6e3c3e3d7 
306ad873c7d8 
3258b6beb926 
4890da71db50 
4aa966f33a88 
4f9a28709c33 
524ef9a2e9fd 
549a9df5d9c4 
594ea008ad1c 
5ac2e713a1e6 
62351a723b50 
688715837b4c 
. 
. 
. 
9393b391526a 
97f2023dcc65 
a4d2bb5d4d52 
ab4148bd2fb9 
aee91e3b71a7 
b34b797e9fe6 
b4d1c74da310 
c10984351e73 
c2c4b1989875 
c95d5afc74e2 
ca82cd3aa0d4 
d0521df160d4 
d99ef18f88fd 
e01106d204cb 
e0b4f8e0248d 
f0a4e63c158c 
f14a297b157d 
f7dbb67755a8 
fe35996d49e9 
ff1f30708195 
Error response from daemon: page not found 

Там нет никакого способа для меня, чтобы знать, какой образ вызывает эту страницу не найден ошибка, есть? Или есть более чистый способ удалить все изображения с моей подчиненной машины, чтобы начать новую работу?

+0

вы можете использовать 'xargs' (немного медленнее) ' Докер пс -qa | xargs docker rmi -f' – Rik

+0

ли контейнеры имеют одинаковый хэш как изображения? Я всегда считал их двумя отдельными сущностями, но, возможно, я недостаточно читал документы. – Kevin

+0

Извините, моя ошибка. Так что это 'docker images -qa | xargs docker rmi -f' и 'docker ps -qa | xargs docker rm -f' – Rik

ответ

1

Для очистки изображений (обратите внимание, что это заставит убирать все), вы можете использовать

docker images -qa | xargs docker rmi -f 

Для очистки контейнеров можно использовать

docker ps -qa | xargs docker rm -f 

Опять же, это заставит убирать все контейнеров, даже если они работают. Вы можете использовать параметр --filter для фильтрации контейнеров, то есть только возбужденных контейнеров

docker ps -qa --filter "status=exited" | xargs docker rm -f 

Существует также хороший пакет ребята из Spotify, docker-gc, которые будут заботиться об этом для Вас.

EDIT docker теперь также имеет доступный system prune команда.

Удалите все неиспользованные контейнеры, объемы, сети и изображения (как оборванные, так и необявленные).

0

около docker stop $(docker ps -a -q) && docker rm $(docker ps -a -q)? В случае необходимости sudo просто добавьте его перед докером.

+0

Это удаляет контейнер, но не образ, используемый для его создания. Docker-compose рисует изображения для создания контейнеров. Я убил контейнеры; это касается изображений, оставшихся на ведомой машине. – Kevin

0

У меня есть подчиненная машина Jenkins docker, где я создаю изображения и выталкиваю их в репозиторий ECR. Вышеупомянутые команды помогли мне очистить все изображения и контейнеры в подчиненном устройстве.

  1. docker images -qa | xargs docker rmi -f (чистые изображения)
  2. docker ps -qa | xargs докер гт -f (чистые контейнеры)

Благодаря @Rik

Смежные вопросы