Статьи

Удалить изображение Docker и контейнер с критериями

Вы установили несколько образов Docker и хотите очистить их с помощью команды rmi . Итак, вы перечислите все изображения как:

01
02
03
04
05
06
07
08
09
10
~> docker images --no-trunc
REPOSITORY                 TAG                 IMAGE ID                                                           CREATED             VIRTUAL SIZE
mysql                      latest              98840bbb442c7dc3640ffe3a8ec45d3fee934c2f6d85daaaa2edf65b380485a0   25 hours ago        236 MB
wildfly-centos             latest              fc378232f03d04bff96987f4c23969461582f73c3a7b473a7cb823ac67939f48   5 days ago          619.6 MB
arungupta/wildfly-centos   latest              e4f1dbdff18956621aa48a83e5b05df309ee002c3668fa452f1235465d881020   6 days ago          619.6 MB
wildfly-ubuntu             latest              a2e96e76eb10f4df87d01965ce4df5310de6f9f3927aceb7f5642393050e8752   7 days ago          749.5 MB
registry                   latest              7e2db37c6564bf030e6c5af9725bf9f9a8196846e3a77a51e201fc97871e2e60   2 weeks ago         411.6 MB
centos                     latest              ae0c2d0bdc100993f7093400f96e9abab6ddd9a7c56b0ceba47685df5a8fe906   4 weeks ago         224 MB
jboss/wildfly              latest              365390553f925f96f8c00f79525ad101847de7781bb4fec23b1188f25fe99a6a   5 weeks ago         948.7 MB
centos/wildfly             latest              1de9304f58bbc2d401b4dcbba6fc686bdd6f6bff473fe486e7cb905c02163b1a   6 weeks ago         606.6 MB

Затем попробуйте удалить изображение «arungupta / wildfly-centos», как показано ниже, но получите ошибку:

1
2
3
~> docker rmi e4f1dbdff18956621aa48a83e5b05df309ee002c3668fa452f1235465d881020
Error response from daemon: Conflict, cannot delete e4f1dbdff189 because the container bafc2b3327a4 is using it, use -f to force
2014/12/02 12:56:53 Error: failed to remove one or more images

Таким образом, вы следуете рекомендации по использованию ключа -f, но получаете еще одну ошибку:

1
2
3
~> docker rmi -f e4f1dbdff18956621aa48a83e5b05df309ee002c3668fa452f1235465d881020
Error response from daemon: No such id: c345720579e024df4f6d28d2062fda64b7743f7dbb214136d4d2285bc3afc95b
2014/12/02 12:56:55 Error: failed to remove one or more images

Чем ты занимаешься ?

Это сообщение указывает, что изображение используется одним из контейнеров и поэтому не может быть удалено. Сообщение об ошибке очень неоднозначно, и за него подано # 9458 .

Между тем, простой способ решить эту проблему — перечислить все контейнеры, как показано:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
CONTAINER ID        IMAGE                             COMMAND                CREATED             STATUS                      PORTS                NAMES
bafc2b3327a4        arungupta/wildfly-centos:latest   "/opt/jboss/wildfly/   4 days ago                                                           boring_ptolemy       
bfe71d92a612        arungupta/wildfly-centos:latest   "/opt/jboss/wildfly/   4 days ago                                                           agitated_einstein    
e1c0965d202c        arungupta/wildfly-centos:latest   "/opt/jboss/wildfly/   4 days ago                                                           thirsty_blackwell    
ddc400c26f1a        mysql:latest                      "/entrypoint.sh mysq   5 days ago          Exited (0) 27 minutes ago   3306/tcp             sample-mysql         
05c741b5e22f        wildfly-centos:latest             "/opt/jboss/wildfly/   5 days ago          Exited (130) 5 days ago                          agitated_lalande     
ff10b83d6c17        arungupta/wildfly-centos:latest   "/opt/jboss/wildfly/   5 days ago                                                           insane_wilson        
b2774b17460c        arungupta/wildfly-centos:latest   "/opt/jboss/wildfly/   5 days ago                                                           goofy_pasteur        
2d64f4eb8fb9        arungupta/wildfly-centos:latest   "/opt/jboss/wildfly/   5 days ago                                                           focused_lalande      
c3f61947671a        arungupta/wildfly-centos:latest   "/opt/jboss/wildfly/   5 days ago                                                           silly_ardinghelli    
ac6f29b92c7a        arungupta/wildfly-centos:latest   "/opt/jboss/wildfly/   5 days ago                                                           stoic_leakey         
fc16f3f8c139        wildfly-centos:latest             "/opt/jboss/wildfly/   5 days ago                                                           desperate_babbage    
4555628a5d0a        wildfly-centos:latest             "/opt/jboss/wildfly/   5 days ago          Exited (-1) 4 days ago                           sharp_bardeen        
3bdae1d2527a        wildfly-centos:latest             "/opt/jboss/wildfly/   5 days ago          Exited (130) 5 days ago                          sick_lovelace        
2697c769c2ee        wildfly-centos:latest             "/opt/jboss/wildfly/   5 days ago                                                           thirsty_fermat       
f8c686d1d6be        wildfly-centos:latest             "/opt/jboss/wildfly/   5 days ago          Exited (130) 5 days ago                          cranky_fermat        
a1945f2ca473        wildfly-centos:latest             "/opt/jboss/wildfly/   5 days ago          Exited (-1) 4 days ago                           suspicious_turing    
31b9c4df0633        arungupta/wildfly-centos:latest   "/opt/jboss/wildfly/   5 days ago                                                           distracted_franklin  
cd8dad2b1e22        c345720579e0                      "/bin/sh -c '#(nop)    5 days ago                                                           cocky_blackwell      

Есть много контейнеров, которые используют изображение «arungupta / wildfly-centos», но ни один из них не работает. Если есть какие-либо контейнеры, которые работают, вам нужно остановить их как:

1
docker rm $(docker stop $(docker ps -q))

Удалите контейнеры, которые используют это изображение как:

1
2
3
4
5
6
7
8
9
docker ps -a | grep arungupta/wildfly-centos | awk '{print $1}' | xargs docker rm
bafc2b3327a4
bfe71d92a612
e1c0965d202c
ff10b83d6c17
b2774b17460c
2d64f4eb8fb9
ac6f29b92c7a
31b9c4df0633

Критерии здесь указаны как шаблон grep.

Команда docker ps имеет и другие параметры для указания критериев, например, только последние созданные контейнеры или контейнеры в определенном состоянии. Например, контейнеры, которые вышли со статусом -1, могут рассматриваться как:

1
2
3
~> docker ps -a -f "exited=-1"
CONTAINER ID        IMAGE                   COMMAND                CREATED             STATUS                       PORTS               NAMES
68aca76aa690        wildfly-centos:latest   "/opt/jboss/wildfly/   39 minutes ago      Exited (-1) 37 minutes ago                       insane_yonath

Все работающие контейнеры, в отличие от соответствия определенным критериям, могут быть удалены как:

1
docker rm $(docker ps -aq)

И теперь изображение может быть легко удалено как:

1
2
3
4
~> docker rmi e4f1dbdff189
Untagged: arungupta/wildfly-centos:latest
Deleted: e4f1dbdff18956621aa48a83e5b05df309ee002c3668fa452f1235465d881020
Deleted: ad2899e176a2e73acbcf61909426786eaa195fcea7fb0aa27061431a3aae6633

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

1
docker rmi $(docker images -q)

Наслаждайтесь!