Ескі Docker контейнерлерін жою әдісі

Бұл мәселе Мен байланысты болуы керек артық емес, жұмыс істемей тұрған, Docker контейнерлері туралы? . .

Мен ескі контейнерлерді қалай алып тастауды сұраймын. docker rm 3e552code34a біреуін алып тастауға мүмкіндік береді, бірақ менде қазірдің өзінде бар партиялар бар. docker rm --help таңдау параметрін бермейді (мысалы, барлығы немесе сурет атауы).

Мүмкін, бұл контейнерлерді қолмен оңай жоюға болатын жерде сақталатын каталог бар шығар?

996
@VonC бұл мен үшін жұмыс істемейді Docker 1.12.3, 6b644ec ).
қосылды автор ReynierPM, көзі
Сондай-ақ, docker run -ді - rm туымен қолдануға болады, ол контейнерді уақытша жасайды, барлық контейнер файлдарын іске қосқаннан кейін алып тастайды.
қосылды автор Gordon, көзі
Docker 1.13 (Q4 2016) көмегімен жаңа docker system prune пәрменін де қарастыруға болады. менің жауапты төменде қараңыз .
қосылды автор VonC, көзі
Сондай-ақ, тазартылған докер томдарын тазалауды де ескеруіңіз керек. Мен ескі контейнерлерге және ескі суреттерге қарағанда әлдеқайда көбірек орын тапқандығын жиі көремін. Жетімсіз докер томдарын жоюға арналған жақсы сценарий мына жерде қол жетімді: github.com/chadoe/docker-cleanup-volumes .
қосылды автор Nemanja Trifunovic, көзі
Мен @NemanjaTrifunovic-мен келісемін. Назар аударыңыз. Бұл сіздің құралдар тақтасында сақтаңыз: docker volume ls -f dangling = true
қосылды автор bitfox, көзі
Мүмкін, сізге github.com/chadoe/docker-cleanup-volumes көмектесе алады.
қосылды автор user1929959, көзі
docker rm -f $ (docker ps -a -q)
қосылды автор sony vizio, көзі

51 жауаптар

There is a new feature in Docker 1.13.x called Docker container prune: docker container prune

Бұл барлық платформаларда бірдей жұмыс істеуіңіз керек.

Сондай-ақ, Docker жүйенің бұрышы бар: docker system prune </контейнерлерді, суреттерді, томдарды және желілерді бір пәрменде тазалайтын код.

Оригинал жауап:

Docker тазалау командасы туралы әңгіме болды. Бұл билет бойынша ақпаратты таба аласыз: «Таза» командасын енгізу (# 928)

Бұл пәрмен қолжетімді болмайынша, сізге қажет нәрсені алу үшін Docker командаларын басқа Unix пәрмендерімен қоса аласыз. Ескі аптада ескі контейнерлерді тазартудың мысалы:

$ docker ps --filter "status=exited" | grep 'weeks ago' | awk '{print $1}' | xargs --no-run-if-empty docker rm

Кредит беру үшін қажет болса, бұл мысал https://twitter.com/jpetazzo/status/ 347431091415703552 .

1115
қосылды
Бұл шешім, олардың жасына байланысты контейнерлерді алып тастағыңыз келсе, жақсы жұмыс істейді. Мен не істегім келеді (менде бұл жалғыз емес деп ойлаймын) - белгілі бір контейнер (лер) дің тәуелділік графигінде жоқ барлық нәрсені жою. Мен Dockerfile әзірлеу кезінде контейнерлердің саны өте тез өсіп келе жатқанын анықтадым. Бұған қоса, барлық файлдарды жою, сізде докерфайлыңызда ұзақ уақыт бойы жинақталған компиляция болған жағдайда, идеалды емес. Егер сізде біреудің бұл мәселені қалай шешуге болатыны туралы идеясы бар болса, мен сіздердің енгізулеріңізге қуаныштымын.
қосылды автор Michel Müller, көзі
@FreekKalter Қызықты - бірақ бұл контейнерлер кэштеу үшін қолданылатын құрылыс процесінің алынып тасталатынын білдірмейді ме? Бұл жағдайда менің қалағанымның керісінше болады - контейнерді немесе контейнермен салынған контейнерді алып тастағым келеді, егер мен құрылысты қайтадан бастасам, ол басынан басталмайды, бірақ мен емес ешқашан ешбір жерге әкелмеген аралық қадамдарды тұрақты түрде ұстап тұру.
қосылды автор Michel Müller, көзі
Бұл команда тетік пен саясатты өзара байланыстырады. Неліктен апта бұрынғы кескінді алып тастау керек, ол әлі де маңызды болып табылады. Бұдан басқа, бұл бұйрық қыруды ойлайды. «-aq» опцияларын қолдану болашақ дәлел болып табылады.
қосылды автор hbogert, көзі
OSX-де жұмыс істемейді xargs: заңсыз опция - . Сұрақ Linux-ды көрсетпейді, сондықтан Ryan Walls-дың төменгі жауабына жауап беріңіз, себебі ол қысқаша және платформа (linux және osx) жұмыс істейді.
қосылды автор Ray, көзі
Сіз оны пайдалануыңыз керек: docker ps -a -no-trunc | egrep '((апта) | (ай)) бұрын' | awk '{print $ 1}' | жоқ - жұмыссыз-бос-бос докер rm . Сондай-ақ ол айлық ескі контейнерлерді жояды (докер 12 аптадан кейін айларды қолданады). Сондай-ақ, ол екіұштылықты болдырмайды.
қосылды автор Matt3o12, көзі
@Ghjnut сені тек Mac-де жұмыс істеген жалғыз нәрсе еді, бірақ оны аздап өзгертуге тура келді. docker rmi $ (docker images -a -q) барлық нәрселерден бас тартуға тырысқан барлық басқа адамдарға 'тәуелді бала суреттері' туралы хабарлама берілді. Мұны кім шешеді, бәрін мүлде жойып тастаңыз.
қосылды автор mwarren, көзі
Мен Mac OS 10 Yosemites пайдаланамын және бұл шешім жұмыс істемейді (тіпті командаға дейін sudo қоссам да).
қосылды автор Shih-Min Lee, көзі
@ MichelMüller кескіндерді кэштеу үшін қолданылатын, сондықтан контейнерлерді алып тастау бұған әсер етпейді.
қосылды автор Ken Cochrane, көзі
Сіз тек докер контейнерлерін пайдалануыңыз керек, барлық платформаларда жұмыс істеу керек.
қосылды автор Ken Cochrane, көзі
grep ... | дегенді ауыстыруға болатындығын атап өткен жөн awk арқылы ғана awk .
қосылды автор Michael Le Barbier Grünew, көзі
Рақмет сізге! Айтпақшы, контейнерлерді белгілеу мүмкін емес пе? Мысалға, дерекқордың бейнесі болуы мүмкін, оның данасы (контейнер) құнды деректер болуы мүмкін. Тағы бір құнды құрал контейнерді «пайдаланылған» ретінде белгілеуі мүмкін, осылайша оны «docker rm» арқылы қорғауға болады.
қосылды автор qkrijger, көзі
бұл ескертулерді сіз айтқан мәселеге енгізетінін ескеріңіз
қосылды автор qkrijger, көзі
Рұқсатты қабылдамаған қателер болса, соңғы пәрменде docker алдында sudo қосыңыз: $ sudo docker ps -a | grep 'апта бұрын' | awk '{print $ 1}' | xargs - non-run-if-empty sudo docker rm -f
қосылды автор Luciano Bargmann, көзі
Егер сіз awk-ді пайдаланғыңыз келсе, мына пәрменді қарастырыңыз, егер сіз барлық контейнерлерді тоқтатсаңыз (бірінші сызықтан қате болмаса): docker ps -a | awk 'NR> 1 ($ 1 басып шығару)' | harrow docker rm
қосылды автор masi, көзі
@ MichelMüller докерфайлдан кескін жасау кезінде сіз табысты құрастырудан кейін аралық контейнерлерді жою үшін -rm параметрін көрсете аласыз.
қосылды автор Freek Kalter, көзі
docker rmi $ (docker images -q -f dangling = true)
қосылды автор Ghjnut, көзі
Ең соңғы Docker көмегімен docker container prune пайдаланыңыз. Ең соңғы Docker қолданбасын пайдалана алмасаңыз, ең соңғы Docker жоқ Minikube v0.21 нұсқасын пайдалансаңыз, айталық, қарапайым docker rm $ (docker ps -q - filter) күйін пайдаланыңыз = exited «)
қосылды автор clay, көзі
Егер көптеген контейнерлер/суреттер болса, docker ps -aq | tr '\ n' '' | жоқ - жұмыссыз-бос-бос докер rm . Docker rm-ге жіберілген өнім бір сызыққа біріктіріледі, сондықтан тек бір доккер командасы орындалады. Бұл сәл жылдамдық.
қосылды автор spinus, көзі
Бұл түсініктеме негізінде әр түрлі жастағы ескі контейнерлерді жою үшін тазарту сценарийі жасалды. Оны мына жерден алуға болады: github.com/juanluisbaptiste/docker- utils/blob/master/sc & zwnj; ripts/& hellip;
қосылды автор Juancho, көзі
Қауіпті !!!! ЕСКЕРТУЛЕРДІ ПАЙДАЛАНУ! Екінші команда ретінде grep арқасында, ол сізге «X апта бұрын жасалған» деген жолды қайтарады, сондықтан сіз жақында құрылған контейнерлерді жоюды аяқтауыңыз мүмкін!
қосылды автор SKR, көзі
Барлық ұқсас емес кескіндерді жою үшін ұқсас пәрмен: docker images | grep «» | awk '{print $ 3}' | xarz docker rmi
қосылды автор Mohan Raj, көзі

Басқа әдіс, ол мені алды Гийом Дж. Чармс (несие, онда ол қажет):

docker rm `docker ps --no-trunc -aq`

барлық контейнерлерді талғампаз түрде жояды.

Және Bartosz Bilicki, Windows үшін:

FOR /f "tokens=*" %i IN ('docker ps -a -q') DO docker rm %i

PowerShell үшін:

docker rm @(docker ps -aq)

Docker 1.13 (Q4 2016) жаңартуы, VonC ( кейінірек осы жолда ):

docker system prune will delete ALL unused data (i.e., in order: containers stopped, volumes without containers and images with no containers).

PR 26108 және commit 86de7c0 , олар Docker демонстрациялық деректерінің қаншалықты кеңістікте дискетке түсіп,» қажетсіз «тазалауға мүмкіндік беретін бірнеше жаңа пәрмендерді енгізеді. артық.

docker system prune

WARNING! This will remove:
    - all stopped containers
    - all volumes not used by at least one container
    - all images without at least one container associated to them
Are you sure you want to continue? [y/N] y
584
қосылды
- no-trunc сөзімен нүктені көрмеймін, себебі docker rm дегенмен, толық идентификаторлар қажет емес.
қосылды автор Pithikos, көзі
@IhorKaharlichenko, мен барлығы үшін xargs - бірақ бәрібір bashism qkrijger түсініктемесіне қосылмады - немесе сіз $() деп ойлайсыз бащизм?
қосылды автор maxschlepzig, көзі
бұл меніңше жұмыс істемейді, бірақ docker ps -a -q | xargs docker rm жұмыс істейді, (sudo қажет болуы мүмкін)
қосылды автор FUD, көзі
@qkrijger, бұл сіздің бастапқы жауапыңыздан ештеңе өзгертпейді, башизмді қоспағанда. Мәселе пәрмен жолы толығымен орындалады. xargs нұсқасы оны жақсы жағынан қарастырады. Мен қақтығыстарға жол бермеу үшін докердің PS-ге қосылмаймын.
қосылды автор Ihor Kaharlichenko, көзі
@maxschlepzig, мен бұл түсініктемені жазған кезде не ойлайтынымды есіме түсірмедім, сондықтан оны қателік деп қарастырайық. Ешқандай $() - бұл bashism емес, сонымен қатар IIRC backteks ескірген болып саналады және $() - ұсынылатын тәсіл болып табылады.
қосылды автор Ihor Kaharlichenko, көзі
деректер контейнері ғана қолданылатындығын біліңіз, ол оларды да алып тастайды
қосылды автор nXqd, көзі
тек маған 13gb сақталды
қосылды автор Christian Bongiorno, көзі
@qkrijger hm, бұл дұрыс. <0.8 docs.docker.io/en/ үшін пайдаланбайды. v0.7.3/commandline/cli/# ps және 0.8 үшін non-trunc docs.docker.io/en/latest/reference/commandline/cli/#ps Мен CHANGELOG-да бұл туралы ештеңе айтқан жоқпын.
қосылды автор chuwy, көзі
PowerShell нұсқасы: docker ps -aq --no-trunc | % {docker rm $ _}
қосылды автор Joe Niland, көзі
Осы лауазымнан ( gist.github.com/ngpestelos/4fc2e31e19f86b9cf10b ): Power Shell опциясы және ' C: \ Program Files \ Docker \ docker 'ps -a | файлын таңдаңыз foreach-object {$ l = $ PSItem.ToString (); $ c = $ l.Substring (0, $ l.IndexOf («»)); егер ($ c.ToLower() -ne «container») {$ cmd = «c: \ Program Files \ Docker \ docker.exe»; & $ cmd «rm» $ c}}
қосылды автор evgenyl, көзі
@FUD сіздің командамызға ұқсас және қажет болған жағдайда күштеу үшін -f қосыңыз, содан кейін docker ps -a -q | rms-f -құрылғылары
қосылды автор Larry Cai, көзі
Мен ескі суреттерді таңдалған жауаппен алып тастаған едім, бірақ қандай да бір себептермен алмады (docker rmi кейбір өтуге қарағанда өзгеше қызықты тегпен). Содан кейін мен бұл пәрменді қолдандым - ол «бірдеңе» жасады, мүмкін суреттер жойылды ма? Қалай болғанда да, ол бірінші пәрменді тіркеді - бұл менің суреттерімді реподан тазартады;)
қосылды автор hauron, көзі
Мен көптеген нәрселерді сынап көрдім, бұл мен үшін ғана жұмыс істеді
қосылды автор Ashley Coolman, көзі
docker rm $ (docker ps -a -q) жойылмайтын контентті болмаса, сәтсіз аяқталады
қосылды автор Lobo, көзі
docker rm $ (docker ps -a -q) туралы не айтасыз?
қосылды автор qkrijger, көзі
@IhorKaharlichenko Сіз дұрыс айтасыз, әзірлеу үшін рахмет. Сондай-ақ, notrunc опциясы туралы жақсы идея. Мен онымен жауапты жаңарттым және сценарийлерімді де жаңартамын
қосылды автор qkrijger, көзі
MyDocker орнату 0.7.x жүйесінде -notrunc бар
қосылды автор qkrijger, көзі
@Pithikos нүктесі - екі хэстің сол 8 әріптік-сандық таңбалармен басталатын өте жұқа мүмкіндігі :). Мәселе мынада, сіз бәрібір сценарий жазу кезінде тұтас хешті пайдаланбаудың қажеті жоқ
қосылды автор qkrijger, көзі
Неліктен докердің бұл үшін қалыпты инерциялық пәрмені жоқ? сияқты: docker rm --all --force немесе docker rm-all-containers сияқты?
қосылды автор sobi3ch, көзі
Бұл мен үшін boot2docker Win 8.1 жүйесінде жұмыс істеді. Мүмкін, оны нақты контейнерлерді орнату арқылы іске асырғым келмейді, мен жасаған сынақ материалдарын тазартқым келді.
қосылды автор Kioshiki, көзі

Updated Answer Use docker system prune or docker container prune now. See VonC's updated answer.

Previous Answer Composing several different hints above, the most elegant way to remove all non-running containers seems to be:

docker rm $ (docker ps -q-status = exited)

  • -q prints just the container ids (without column headers)
  • -f allows you to filter your list of printed containers (in this case we are filtering to only show exited containers)
389
қосылды
Жауап дұрыс емес деп белгіленбесе, @RyanWalls OSX жүйесінде жұмыс істейді, сондай-ақ қысқаша болады.
қосылды автор Ray, көзі
alias docker-gc = «docker rm -v \ $ (docker ps -q-status = exited)»
қосылды автор Frank Neblung, көзі
docker rm -v $ (docker ps -q-status = exited) болдырмау үшін -v қосқыңыз келуі мүмкін. docs.docker.com/userguide/ бөлімін қараңыз. dockervolumes/& hellip; сақталатын көлемдер туралы мәліметтер.
қосылды автор rluba, көзі
Бұл сондай-ақ Windows PowerShell бағдарламасымен жұмыс істейді.
қосылды автор Tobias, көзі
@rluba, Docker 1.9-да осы мәселені шешу үшін жеке дыбыс апи болады. github.com/docker/docker/pull/14242
қосылды автор Ryan Walls, көзі
Бұл дұрыс жауап болуы керек, себебі ол $ (docker кескіндерінің) мәтіндік шығыс пішімін өзгертпейтіндіктен, қай контейнерлер пайдаланылмайтынын айтып беру үшін доккерге сүйенеді. Екінші орнына тек қосымша бір процесті егу үшін бонус ұпайлары.
қосылды автор eurythmia, көзі
«docker rm» кемінде 1 дәлелді талап етеді.
қосылды автор Xero, көзі

The official way is:

docker rm `docker ps -aq`

Доккерді ұстаушылар бұған ешқандай бұйрық болмайтындығын көрсетті және келесідей командаларды жасайсыз:

Бұны бұрын талқылап, пайдаланушыларды Docker-ге қосымша код қосудың қажеті жоқ, жоғарыда аталған жолды пайдалануды ұсынамыз.

242
қосылды
Бұл Windows Powershell ішінде жұмыс істемейтінін ескеріңіз. Бұл үшін бұл жақсы шешім: stackoverflow.com/a/23674294/1150683
қосылды автор Bram Vanroy, көзі
Бұл жаман шешім, бірақ ол сақтау контейнерлерін де жойады.
қосылды автор Sobrique, көзі
@Sobrique Егер сіз жауап бермесеңіз, кем дегенде сіз өз пікіріңізді жоюыңыз керек, ол дерлік толық және зиянды нонсенс.
қосылды автор peterh, көзі
«Сақтау контейнерлері» дегеніміз не? Деректердің көлеміне сілтемелерді сақтау үшін бір уақытта қолданылған дерекқор контейнерлері болса, олар docker volume subcommand қол жетімділігі және аталған томдар болғандықтан қажет емес.
қосылды автор L0j1k, көзі

Docker 1.13 (Q4 2016) көмегімен сізде қазір:

docker system prune -a will delete ALL unused data (i.e., in order: containers stopped, volumes without containers and images with no containers).

docker system prune without -a will remove (for images) only dangling images, or images without a tag, as commented by smilebomb.

PR 26108 бөлімін қараңыз және commit 86de7c0 , олар Docker деemon деректерінің дискке қалай түсетінін және оңай тазалануына мүмкіндік беретін визуализацияға көмектесу үшін бірнеше жаңа пәрмендерді енгізеді» артық емес «артық.

docker system prune -a

WARNING! This will remove:
    - all stopped containers
    - all volumes not used by at least one container
    - all images without at least one container associated to them
Are you sure you want to continue? [y/N] y

wjv пікірлері ретінде,

Нысанның бір типінің пайдаланылмаған даналарын жою үшін пайдаланылуы мүмкін docker {container, image, volume, network} бұғаттау .

913e5cb файлын орындау , тек Docker 1.13+ ішінде енгізілген.

docker container prune
106
қосылды
қазіргі кездегі дұрыс жауап ретінде белгіленуі керек, жоғарыда айтылғандардың көбісі өз уақытында дұрыс болды, бірақ түйіндер өте күрделі
қосылды автор Eugen Mayer, көзі
Код блокындағы сипаттама пайдаланылмаған суреттерді алып тастайтын docker system prune -a үшін. docker system prune тек суретке түсіретін суреттерді немесе тег жоқ суреттерді жояды.
қосылды автор smilebomb, көзі
Тексерілгенді өңдеу. Барлық жүйелер жүреді.
қосылды автор smilebomb, көзі
Соңғы уақытта келісілген, соншалықты жеңілірек, жоғары көтеріңіз!
қосылды автор Maxim Geerinck, көзі
Әдеттегідей, тазалауды сұрамай-ақ сұрамау үшін -f туын қосыңыз.
қосылды автор Dirk, көзі
@smilebomb Жақсы нүкте. -a опциясын қосу үшін жауапты өңдедім. Бұл түзетуді тексере аласыз ба?
қосылды автор VonC, көзі
@smilebomb Рахмет сізге \ o /
қосылды автор VonC, көзі
Ортақ пайдаланғаныңыз үшін рақмет - бұл көрінетін болады, мен сізді жіптегі жоғары жауапқа сілтеме жасаймын
қосылды автор qkrijger, көзі
Мен сізді қазірдің өзінде қуаттадым :)
қосылды автор qkrijger, көзі

docker ps көмегімен сүзгілеу мүмкіндігін қолдануға болады:

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

кескіндері үшін:

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

Дегенмен, олардың біреуі сәйкес емес контейнерлер болған кезде қате жіберуге docker rm немесе docker rmi тудыруы мүмкін. Неғұрлым ескі docker rm $ (docker ps -aq) трюк бұрынғыдан да нашар болды, себебі ол кез келген істемейтін контейнерді жоюға тырысты.

~/.bashrc немесе ~/.profile ішіне қосу үшін тазартылған сценарий:

# Use `docker-cleanup --dry-run` to see what would be deleted.

function docker-cleanup {
  EXITED=$(docker ps -q -f status=exited)
  DANGLING=$(docker images -q -f "dangling=true")

  if [ "$1" == "--dry-run" ]; then
    echo "==> Would stop containers:"
    echo $EXITED
    echo "==> And images:"
    echo $DANGLING
  else
    if [ -n "$EXITED" ]; then
      docker rm $EXITED
    else
      echo "No containers to remove."
    fi
    if [ -n "$DANGLING" ]; then
      docker rmi $DANGLING
    else
      echo "No images to remove."
    fi
  fi
}

Өңдеу: Төменде айтылғандай, түпнұсқалық жауап контейнерлерді емес, суреттерді жоюға арналған. Құжаттарға жаңа сілтемелермен қоса, екеуіне жауап беру үшін жаңартылды. ps сүзгісі туралы еске салған Адрианға (және Райанның жауабына) рахмет.

100
қосылды
Бұның нақты пайда болуына назар аударыңыз - сіз кездейсоқ storage конатинерлерін өшірмейсіз.
қосылды автор Sobrique, көзі
Сондай-ақ, жұмыс істемейтін және ешқашан іске қосылмағандарды алу үшін status = created -ді қолдануға болады.
қосылды автор Elysian Fields, көзі

UPDATED 2017 (NEWEST)

docker container prune

Бұл - 2017 (OLD) жолы

ALL STOPPED CONTAINERS жою үшін

docker rm $(docker ps -a -q)

To remove ALL CONTAINERS (STOPPED AND NON STOPPED)

docker rm  -f $(docker ps -a -q)
88
қосылды
docker volume/container/image prune болар еді, бұл stackoverflow.com/a/39860665/3625317
қосылды автор Eugen Mayer, көзі
OS X жүйесінде маған жұмыс істеді
қосылды автор cljk, көзі
төмендеуге қарсы көтерілген, себебі: а) бұл жауап 2016 жылдан бастап болған, және б) көп адамдар қан кету жиегін іске асырмайды.
қосылды автор keen, көзі

Барлық тоқтатылған контейнерлерді алып тастаңыз:

docker rm $(docker ps -a | grep Exited | awk '{print $1}')

Түсініктеме бойынша pauk960 :

grep Exited орнына docker ps орнына 1.3.0 нұсқасынан docker ps f күйі = шыққан . Егер сіз оны -q қолдансаңыз, толық шығарылымның орнына контейнер идентификаторларын алуға болады, бұл үшін awk пайдалану қажет емес.

47
қосылды

If you do not like to remove all containers, you can select all containers created before or after a specific container with docker ps --before or with docker ps --since . This feature is at least in Docker version 0.6.5.

Айталық, сіз өзіңіздің жүйеңізді дамыттыңыз, қазір ол жұмыс істейді, бірақ бірнеше контейнер қалды. Жұмыс нұсқасынан бұрын жасалған контейнерлерді жою керек. docker ps көмегімен жұмыс контейнерінің идентификаторын анықтаңыз.

Басқа контейнер алдында жасалған контейнерлерді алып тастаңыз

docker rm $(docker ps --before 9c49c11c8d21 -q)

Басқа мысал. Деректер базасы Docker контейнерінде бұрыннан бар. Сіз басқа контейнерде іске қосу үшін қосымшаңызды әзірледік және енді сізде қажет емес контейнерлер бар.

Белгілі бір контейнерден кейін жасалған контейнерлерді алып тастаңыз

docker rm $(docker ps --since a6ca4661ec7f -q)

Docker Ubuntu жүйесінде /var/lib/docker/containers контейнерлерін сақтайды. Меніңше, қосымша контейнерлер ешқандай зиян келтірмейді, бірақ дискілік кеңістікке қол жеткізеді.

31
қосылды

Update: As of Docker version 1.13 (released January 2017), you can issue the following command to clean up stopped containers, unused volumes, dangling images and unused networks:

docker system prune

exited мәртебесі бар контейнерлерді ғана жоюды қамтамасыз етсеңіз, мына әрекетті пайдаланыңыз:

docker ps -aq -f status=exited | xargs docker rm

Докер заттарын тазалайтын болсаңыз, сол сияқты тегіс, атаусыз бейнелерден құтылуға болады:

docker images -q --no-trunc -f dangling=true | xargs docker rmi
29
қосылды

Міне, менің docker-cleanup сценарийі, ол сақталмаған контейнерлер мен кескіндерді алып тастайды. Жаңартулардың көзін тексеріңіз.

#!/bin/sh
# Cleanup docker files: untagged containers and images.
#
# Use `docker-cleanup -n` for a dry run to see what would be deleted.

untagged_containers() {
  # Print containers using untagged images: $1 is used with awk's print: 0=line, 1=column 1.
  docker ps -a | awk '$2 ~ "[0-9a-f]{12}" {print $'$1'}'
}

untagged_images() {
  # Print untagged images: $1 is used with awk's print: 0=line, 3=column 3.
  # NOTE: intermediate images (via -a) seem to only cause
  # "Error: Conflict, foobarid wasn't deleted" messages.
  # Might be useful sometimes when Docker messed things up?!
  # docker images -a | awk '$1 == "" {print $'$1'}'
  docker images | tail -n +2 | awk '$1 == "" {print $'$1'}'
}

# Dry-run.
if [ "$1" = "-n" ]; then
  echo "=== Containers with uncommitted images: ==="
  untagged_containers 0
  echo

  echo "=== Uncommitted images: ==="
  untagged_images 0

  exit
fi

# Remove containers with untagged images.
echo "Removing containers:" >&2
untagged_containers 1 | xargs --no-run-if-empty docker rm --volumes=true

# Remove untagged images
echo "Removing images:" >&2
untagged_images 3 | xargs --no-run-if-empty docker rmi

Source: https://github.com/blueyed/dotfiles/blob/master/usr/bin/docker-cleanup

19
қосылды
@BradMurray Рахмет! Сізге де ұнауы мүмкін: github.com/blueyed/dotfiles/commit/…
қосылды автор blueyed, көзі
xargs - non-run-if-empty параметрі себебінен OSX жүйесінде жұмыс істемейді
қосылды автор caktux, көзі

Windows қабықшасындағы барлық контейнерлерді жою:

FOR /f "tokens=*" %i IN ('docker ps -a -q') DO docker rm %i
10
қосылды
«Windows қабығынан» ? Windows қабығын (CMD) « арқылы » білдіреді ме?
қосылды автор Peter Mortensen, көзі
Мен бұл туралы менің жауапыма қосамын, себебі бұл бірінші бет. Рахмет
қосылды автор qkrijger, көзі

Алдымен оларды алып тастамас бұрын контейнерлерді жауып тастаңыз

Қолданыстағы контейнерлерді алып тастаңыз

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

stop орнына kill қолданыңыз. Менің жағдайымда stop -ды таңдадым, себебі оларды әрдайым жаңартып отыруды қайтадан үйренуге тура келеді, сондықтан оларды жақсы түрде өшіруге тырысамын.

Note: Trying to stop a container will give you an error:

Қате: Қолданыстағы контейнерді жою мүмкін емес, оны тоқтатыңыз

Барлық контейнерлерді алып тастаңыз

docker rm $(docker ps -a -q)
10
қосылды

https://github.com/HardySimpson/docker-cleanup

Доккерді тазалау

Кішкентай моноблок қабығы, ол мыналарды жояды:

  • Бір күн бұрын жұмыс істемейтін контейнерлер
  • Қалған контейнерге тиесілі емес суреттер

Crontab тапсырмасы ретінде іске қосуды жоспарлаңыз

Ерекшелігі

  • It will remove all : images
  • If the image has multiple repo:tag references to it, it will remove all repo:tag except with running a container. Actually it is a nature of "docker rmi".
  • Many error message will be show on screen, and you can decide to 2>/dev/null or not
  • Learn something from docker-gc, and fix its problem (it can not remove image that has mutliple repo:tag)
7
қосылды

Пайдаланыңыз:

docker rm -f $(docker ps -a -q)

Ол жердегі барлық контейнерлерді күшпен тоқтатады және жояды.

7
қосылды
бұл плюс ретінде Windows-де де жұмыс істейді!
қосылды автор Robert Ivanc, көзі
@Elliott Менің ойымша, сіз пайдаланушыды 'docker' тобына қоспайынша, sudo деп ойлаймын. Пайдаланушыны docker тобына қосу арқылы sudo жоқ ubuntu 16.10 пайдаланды.
қосылды автор emory, көзі
Қосымша ақпаратпен түзетіңіз. Тек коды және «осы әрекетті байқап көр» деген жауаптар ұнжырғасы түседі, себебі оларда ізделмейтін мазмұн жоқ, және неге біреуге «бұл әрекетті» жасау керек екенін түсіндіріп бермеңіз. Біз осында білім алу үшін ресурс болу үшін күш саламыз.
қосылды автор Brian Tompsett - 汤莱恩, көзі
Ubuntu 16.04 нұсқасында docker sudo талап етеді, сондықтан sudo docker rm -f $ (sudo docker ps -a -q) жазуыңыз керек.
қосылды автор Elliott, көзі

Мәселен, жеке мен бұл ұсынамын бөлігі ретінде скриптің сіздің екі суреттер мен контейнерлер, тек соңғы контейнерлер мен контейнерлерді ұстап. Мен Docker кескіндерін go tag арқылы қолданатын бірдей нұсқалық схемамен тегімдеп, сонымен бірге ең соңғы Docker кескінін «соңғы» деп белгілеп қойамын. Бұл дегеніміз, ештеңені тазартусыз менің Docker суреттерім төмендегідей көрінеді:

REPOSITORY              TAG       IMAGE ID        CREATED         VIRTUAL SIZE
some_repo/some_image    0.0.5     8f1a7c7ba93c    23 hours ago    925.4 MB
some_repo/some_image    latest    8f1a7c7ba93c    23 hours ago    925.4 MB
some_repo/some_image    0.0.4     0beabfa514ea    45 hours ago    925.4 MB
some_repo/some_image    0.0.3     54302cd10bf2    6 days ago      978.5 MB
some_repo/some_image    0.0.2     0078b30f3d9a    7 days ago      978.5 MB
some_repo/some_image    0.0.1     sdfgdf0f3d9a    8 days ago      938.5 MB

Әрине, менің барлық суреттерімді (немесе контейнерлерді) менің барлық өндіріс қораптарымда мәңгілікке қайтаруды қаламаймын. Мен соңғы 3-тен 4-еуді айналдырып, басқа нәрселерден құтылуды қалаймын. Unix компаниясының tail - сіздің ең жақсы досыңыз. docker images және docker ps болғандықтан, біз тек tail функциясын пайдалана аламыз.

docker rmi $(docker images -q | tail -n +4)

Скиптерлермен бірге (немесе жергілікті түрде) ескі кескіндермен тым көп бөлмеңізді немесе қоқыс жинамай, ыңғайлы түрде оралу үшін жеткілікті кескіндерді ұстап тұру үшін іске қосыңыз.

Мен өзімнің өндіріс қорабында бір контейнерді кез-келген уақытта ғана ұстап тұрамын, бірақ контейнермен бірдей нәрсені жасай аласыз:

docker rm $(docker ps -aq | tail -n +4)

Ақыр соңында, менің оңайлатылған мысалдамыз, біз бір мезгілде бір репозиториймен айналысып жатырмыз, бірақ егер сізде көп болса, сол идеямен біршама күрделендіре аласыз. Кейбір some_repo/some_image ішіндегі соңғы үш бейнені сақтағым келеді. Мен тек grep және awk түрінде араласып, өз жолымда бола аламын:

docker rmi $(docker images -a | grep 'some_repo/some_image' | awk '{print $3}' | tail -n +4)

Тағы да, бұл идея контейнерлерге қатысты, бірақ сіз оны дәл осы нүктеге дейін жеткізесіз, осылайша мысалдар беруден бас тартамын.

6
қосылды

Барлық тоқтатылған контейнерлерді жою.

sudo docker rm $ (sudo docker ps -a -q)

Бұл барлық тоқтатылған контейнерлерді ps -a -q доккері бар барлық контейнерлердің тізімін алу және олардың идентификаторларын docker rm-ге жіберу арқылы жойылады. Бұл кез-келген жұмыс істеп тұрған контейнерлерді алып тастауға болмайды және ол жұмыс істеп тұрған кескінді жою мүмкін еместігін білдіреді.

Барлық кесілген суреттерді жою

Енді кейбір кеңістікті сақтау үшін ескі кескіндерді тазалау керек.

sudo docker rmi $ (sudo docker images -q - фильтр «dangling = true»)

5
қосылды
Бұл тек қана Windows жүйесінде емес, Windows жүйесінде жұмыс істейді ... Бірақ docker rm -f $ (docker ps -a -q) Windows үшін PowerShell/Docker жұмыс істейді.
қосылды автор Peter Mortensen, көзі
-V параметрін көрсету арқылы docker томдарын жоюды ұмытпаңыз (sudo docker rm -v $ (sudo docker ps -a -q))
қосылды автор vcarel, көзі
Бұл нәрсені көрген емеспін, бірақ менің ойымша: docker ps -aq | rms-v -құрылғылар
қосылды автор quine, көзі

5 ескі контейнерлерді алып тастаңыз:

docker rm `docker ps -aq | tail -n 5`

Онда қанша контейнер қалғанын қараңыз:

docker ps -aq | wc -l
4
қосылды

New way: spotify/docker-gc play the trick.

 docker run --rm -v /var/run/docker.sock:/var/run/docker.sock -v /etc:/etc spotify/docker-gc
  • Бір сағат бұрын шыққан контейнерлер жойылды.
  • Қалған контейнерге тиесілі емес кескіндер жойылғаннан кейін

Ол экологиялық параметрлерді қолдады

Көп тегтер бар кескіндерді жоюға мәжбүрлеу

 FORCE_IMAGE_REMOVAL=1

контейнерлерді жоюға мәжбүрлеу

 FORCE_CONTAINER_REMOVAL=1 

Қоқыс жинағынан жақында шыққан контейнерлер мен кескіндерді қоспағанда

 GRACE_PERIOD_SECONDS=86400

Бұл параметр сонымен қатар GRACE_PERIOD_SECONDS секундтан азырақ жасалынған суреттерді жоюға жол бермейді.

Құрғақ іске қосу

 DRY_RUN=1

Cleaning up orphaned container volumes CLEAN_UP_VOLUMES=1

Reference: docker-gc

Ескі әдіс:

ескі, жұмыс істемейтін контейнерлерді жою

 docker ps -a -q -f status=exited | xargs --no-run-if-empty docker rm
             OR 
 docker rm $(docker ps -a -q)

жұмыс істемейтін доккер контейнерлерімен байланыстырылған барлық суреттерді жою

 docker images -q | xargs --no-run-if-empty docker rmi

docker нұсқасына 1.10.x және жоғары үшін жеткіліксіз докер томдарын тазалау

 docker volume ls -qf dangling=true | xargs -r docker volume rm

Уақыт кезеңіне негізделген

 docker ps -a | grep "weeks ago" | awk "{print $1}" | xargs --no-run-if-empty docker rm
 docker ps -a | grep "days ago" | awk "{print $1}" | xargs --no-run-if-empty docker rm
 docker ps -a | grep "hours ago" | awk "{print $1}" | xargs --no-run-if-empty docker rm
4
қосылды
Қызықты альтернатива. +1
қосылды автор VonC, көзі
  1. Remove all docker processes:

    docker rm $(docker ps -a -q)
    
  2. Remove specific container:

    $ docker ps -a (lists all old containers)
    
    $ docker rm container-Id
    
4
қосылды

Шығатын контейнерлерді жою үшін келесі пәрменді пайдалануға болады:

docker rm $(sudo docker ps -a | grep Exit | cut -d ' ' -f 1)

Докерге ескі кескіндерді алып тастаудың толық мүмкіндігі мынада: Ескі Docker контейнерлерін және суреттерін жою үшін Gist .

4
қосылды
stackoverflow.com/a/24681946/1938621 іс жүзінде қайталанатын
қосылды автор Ryne Everett, көзі

Доккер контейнерін тоқтатып, тоқтағаннан кейін контейнерді алып тастай аласыз.

Контейнерді тоқтатыңыз:

$ docker stop "containerID" - you can also mention the first two letters of the container ID, and it works.

Контейнерді алып тастаңыз

$ docker rm "containerID" - again you can also mention the first two letters of the container

If these command do not let you stop/Контейнерді алып тастаңызs, m,ake sure you have sudo access to docker host.

4
қосылды

Барлық контейнерлер мен суреттерді тоқтату/жою үшін негізгі қадамдар

  1. List all the containers

    docker ps -aq

  2. Stop all running containers

    docker stop $(docker ps -aq)

  3. Remove all containers

    docker rm $(docker ps -aq)

  4. Remove all images

    docker rmi $(docker images -q)

Note: First you have to stop all the running containers before you remove them. Also before removing an image, you have to stop and remove its dependent container(s).

4
қосылды

Бұл пәрменді контейнерлерді тазалау және кескіндерді сыпырып көріңіз.

docker system prune -f
3
қосылды
Бұл таңғажайып промент!
қосылды автор b01, көзі

Тек тоқтап қалған контейнерлерді шығаруға болады. Бәрін басында тоқтатыңыз

docker тоқтату $ (docker ps -a -q)

Содан кейін жоюға болады

docker rm $ (docker ps -a -q)

3
қосылды
#!/bin/bash
# docker-gc --- Remove stopped docker containers

RUNNING=$(docker ps -q)
ALL=$(docker ps -a -q)

for container in $ALL ; do
    [[ "$RUNNING" =~ "$container" ]] && continue
    echo Removing container: $(docker rm $container)
done
3
қосылды
өздері үшін іздеуге келмейтіндер үшін github.com/spotify/docker-gc
қосылды автор grim, көзі

Мен барлық суреттерді жою үшін әрдайым docker rmi $ (docker ps -a -q) қолданамын.

docker rmi сәтсіз болғанда /var/lib/docker/graph каталогын жоюға болады.

3
қосылды
Бұл пікір қазірдің өзінде жарияланды.
қосылды автор qkrijger, көзі
/ Var/lib/docker/графикалық ақпараты үшін рақмет
қосылды автор Jonathan DeMarks, көзі
Сұрақтар бейнені емес, контейнерлерді қалай алып тастауды болды.
қосылды автор pauk960, көзі

БАРЛЫҚ контейнерлерді жылаусыз алып тастау үшін:

sudo docker ps -a | grep -v CONTAINER | awk '{print $1}' | xargs --no-run-if-empty sudo docker rm -f
2
қосылды

Шығатын контейнерлерді автоматты түрде/мезгіл-мезгіл тазалауды және қолданыстағы контейнерлерде қолданылмайтын кескіндерді және көлемдерді жоюды қаласаңыз, erit/docker cleanup суретін жүктеуге болады.

Мен оны бірнеше рет серверлерде күніне бірнеше рет қолданатындықтан өндірісте қолданамын және тазарту үшін әр серверге барғым келмейді (бұл ауырсыну еді).

Жай жүгіріңіз:

docker run -d -v /var/run/docker.sock:/var/run/docker.sock:rw  -v /var/lib/docker:/var/lib/docker:rw --restart=unless-stopped meltwater/docker-cleanup:latest

Бұл әдепкі бойынша әр 30 минут сайын орындалады (немесе оны ұзақ уақыт DELAY_TIME = 1800 параметрі арқылы орнатасыз) және шығып кеткен контейнерлер мен суреттерді тазалау.

More details: Docker Cleanup

2
қосылды

Ubuntu 14.04 туралы (Trusty Tahr):

$ for CON in `docker ps -qa`; do docker rm $CON ; done

Бұл әдеттегі Bash командасы, сондықтан ол барлық Bash-үйлесімді терминалмен жұмыс істеуі керек.

2
қосылды
Терминалға бірінші $ енгізіле ме (немесе бұл сұраудың бөлігі болып табылады?)?
қосылды автор Peter Mortensen, көзі
@PeterMortensen бірінші $ тек қана қабықша сұрауын білдіреді en.wikipedia. org/wiki/Command-line_interface # Command_prompt
қосылды автор sobi3ch, көзі

Белгілі бір кескіннен жасалған барлық контейнерлерді алып тастаңыз:

docker rm  $(docker ps -a | awk '/myimage:mytag/{print $1}')
2
қосылды
Жақсы, маған ұнайды: D
қосылды автор qkrijger, көзі

Қызығушылық танытқан кез келген адам үшін, мен qkrijger-дан мысалды алып, оны бәріне анық (айналдырып, алып тастау)

docker stop `docker ps --no-trunc -aq` ; docker rm `docker ps --no-trunc -aq`
2
қосылды
Егер контейнерлерді алып тастасаңыз, онда docker rm -f $ (docker ps - non-trunc -aq) жылдамырақ
қосылды автор qkrijger, көзі
келісілді, бұл өте жарамды
қосылды автор qkrijger, көзі
Рас, бірақ қажет болса, ортақ немесе қайта пайдаланылған ресурстарды (мысалы, қосымша томдар, дұрыс белсенді қосылымдар және т.б.) тазалау үшін тиісті өшіру арқылы өту қажет болса, алдымен тоқтауды шақырыңыз. Үлкен мысал, егер сізде Jenkins контейнері бар болса, онда контейнерді өлтіру дұрыс емес. Сіз кез-келген өзгермейтін өзгерістерді сақтап, жүйеге кірген пайдаланушыларға ескерту жасағыңыз келеді және, ең маңыздысы, барлық құрылымдарды дұрыс тоқтатыңыз.
қосылды автор Kraig McConaghy, көзі

Контейнерлерді жою үшін кейбір Docker UI бағдарламаларын пайдалануға болады.

Жарнама үшін кешірім сұраймын, бірақ сол нәрселерді жасау үшін әрдайым жеке қолданамын. Сіз Docker кескіндерін немесе контейнерлерін басқару үшін қарапайым бағдарламаны іздесеңіз, оны көріңіз: https://github .com/alex-agency/AMHub .

Бұл Docker контейнерінің ішінде жұмыс істейтін Docker UI веб-бағдарламасы. Оны орнату үшін сізге тек осы пәрменді шақыру қажет:

docker run -d -p 80:80 -p 8000:8000 -e DOCKER=$(which docker) -v /var/run/docker.sock:/docker.sock alexagency/amhub
2
қосылды
Нағыз әскери қызметкердің немен айналысқанын қалай түсіндіре аласыз? Олар, мысалы, жетім балаларға арналған контейнерлердің көп екенін біледі. Басқа біреуді қосу кедей шешімге ұқсайды ...
қосылды автор Johan Sundström, көзі
docker rm --force `docker ps -qa`
2
қосылды

Алдымен суреттерді тоқтатып, алып тастауды ұсынамын.

Сіз сияқты болуы мүмкін:

$ docker stop $(docker ps -a)
$ docker rm $(docker ps -a)
2
қосылды
Ол тек $ docker (доллар белгісімен) ме? Немесе $ қабықтың шақыруын?
қосылды автор Peter Mortensen, көзі
$ Shell сұрауы үшін. көрсеткеніңіз үшін рақмет. кеңістік қосылды
қосылды автор Siena, көзі

Келесі кірістірілген пәрмендерді пайдаланыңыз:

$ sudo docker stop $(sudo docker ps -a -q)

Бұл пәрмен барлық іске қосылған контейнерлерді тоқтатады.

$ sudo docker rm $(sudo docker ps -a -q)

Бұл пәрмен барлық контейнерлерді жояды.

1
қосылды

Мен төменде көрсетілген пәрменді барлық контейнерлерді тоқтату және алып тастау өте ыңғайлы екенін таптым. -f (күш) жалаушасын пайдаланып жатсаңыз, басқа командамен нақты тоқтатудың қажеті жоқ:

docker rm -f $(docker ps -a -q)
1
қосылды

Міне, барлық шығатын контейнерлерді жоятын бір-лайнер.

docker rm $ (docker ps -a | grep Шығарылған | grep -v CON | awk '{print $ 1}')

БАРЛЫҚ суреттерді алып тастау керек болса, сіз осындай нәрсені пайдалана аласыз.

docker rmi $ (docker суреттері | sed -n '1! p' | awk '{print $ 3}')

1
қосылды
#!/bin/bash

echo Cleanup unused containers
unused_containers=$(docker ps -a -q --filter="status=exited")
if [[ -n $unused_containers ]]
then
  docker rm $unused_containers
fi

echo Cleanup unused images
unused_images=$(docker images | grep '^' | awk '{print $3}')
if [[ -n $unused_images ]]
then
  docker rmi $unused_images
fi
1
қосылды
Сіз жауап берсеңіз, кодтың қоқысы ғана емес, шешім немен байланысты екенін түсіндірген жөн, әйтпесе жауап жойылуы мүмкін.
қосылды автор AlBlue, көзі

Ескі Docker контейнерлерін алу өте оңай.

Барлық контейнерлерді тізімдеңіз:

docker ps -a
docker ps (To list the running containers)

docker ps -a соқтығысқаннан кейін контейнер идентификаторымен бірге (контейнер идентификаторымен бірге бірегей және a-z, A-Z және 0-9 комбинациясы) контейнерлердің тізімі беріледі. Сіз жойғыңыз келетін контейнер идентификаторын көшіріп, төменде келтіріңіз.

docker rm container_id

Сіздің контейнеріңіз /var/lib/docker/aufs ішінде жасалған қабаттармен бірге жойылады (егер сіз Ubuntu-ды пайдалансаңыз).

1
қосылды

Мен келесі нұсқалардың нұсқаларын қолданамын:

docker ps -a | grep 'cassandra.*Exited' | cut -d " " -f 1

Бірінші бөлім барлық процестерді тізімдейді.

Екіншісі - «кассандра» және кейін «Exited» дегендерді ғана таңдайды.

Үшінші, кескін ID-ден кейін барлық сынақтарды жояды, сондықтан сіз сурет идентификаторларының тізімін аласыз.

Осылайша,

docker rm $(docker ps -a | grep 'cassandra.*Exited' | cut -d " " -f 1)
0
қосылды

Linux орнатылымы үшін sudo пайдаланылатынын тексеріңіз. Сондай-ақ, айлар мен апта бұрынғы суреттерді іздеу жақсы:

sudo docker ps -a | grep 'weeks ago\|months ago' | \
    awk '{print $1}' | xargs --no-run-if-empty sudo docker rm
0
қосылды
sudo-ке жол бермеу үшін Linux-дегі докерге арналған орнату нұсқауларын оқып шығыңыз
қосылды автор qkrijger, көзі

Қазіргі уақытта жұмыс істеп тұрған контейнерде пайдаланылмайтын барлық нәрселерді жою үшін bash_profile

alias dockerclean="docker ps -q -a | xargs docker rm -v && docker images -q | xargs docker rmi"

Әрдайым dockerclean пәрмен жолынан шақырылған кезде тоқтатылған контейнерлерді, сондай-ақ пайдаланылмаған кескін қабаттарын алып тастайды. Қолданылатын контейнерлер мен пайдаланылған суреттер үшін ол ескерту туралы хабарды басып шығарады және оны өткізіп жібереді.

0
қосылды

Менің тәжірибемнен контейнерлерді «бұл контейнер әлі де жұмыс істеп тұрған» қателіктерден аулақ болу үшін алып тастамас бұрын тоқтату керек, сондықтан:

sudo /usr/bin/docker ps -aq |  awk '{print $1}' | \
xargs --no-run-if-empty bash -c 'sudo docker stop [email protected]; sudo docker rm [email protected]' bash

Мен өзімнің файлдарымда бүркеншік аттарды сақтаймын:

alias wipedocker="sudo /usr/bin/docker ps -aq |  awk '{print $1}' \
| xargs --no-run-if-empty bash -c 'sudo docker stop [email protected]; sudo docker rm [email protected]' bash"
0
қосылды
Қолданыстағы контейнерді жою үшін docker rm-ге -f туын жіберуіңізге болады.
қосылды автор Marcello Romani, көзі

Бұл қысқа сценарий (алдыңғы жауаптардан құрастырылған) көмектесе алады!

#!/bin/bash

# Remove dangling images

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

if [ -n "$IMAGE_IDS" ]; then

    sudo docker rmi $IMAGE_IDS > /dev/null 2>&1
    echo 'Images removed' $IMAGE_IDS
fi


# Remove exited containers

CONTAINER_IDS=$(sudo docker ps -a -q -f status=exited)

if [ -n "$CONTAINER_IDS" ]; then

    sudo docker rm -v $CONTAINER_IDS > /dev/null 2>&1
    echo 'Containers remove $CONTAINER_IDS'
fi
0
қосылды
Бұл жауаптың форматы бұзылған. Бір немесе екі сценарий болуы керек пе?
қосылды автор JohnC, көзі
бұл - бір сценарий
қосылды автор Chetan Sharma, көзі

Бұл процесс екі қадамды қамтиды (тоқтату және жою):

  1. Stop the container that is being used by any running microservices

    docker stop $(docker ps -a -q)
    
  2. Remove all the containers

    docker rm $(docker ps -a -q)
    
  3. Remove single container

    docker rm container-ID
    
0
қосылды

Мен пайдаланамын:

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

Шығатын контейнерлерді жою үшін және:

docker rmi -f $(docker images | grep "" | awk "{print \$3}")

барлық тегіс бейнелерден құтылу үшін.

0
қосылды

docker rm -f $(docker ps -a -q) will do the trick. It will stop the containers and remove them too.

0
қосылды

Бұл екі бас сызық контейнерді кейбір түйінді сөздер арқылы сүзеді:

containers_to_keep=$(docker ps -a | grep 'keep\|Up\|registry:latest\|nexus' | awk '{ print $1 }')
containers_to_delete=$(docker ps -a | grep Exited | grep -Fv "$containers_to_keep" | awk '{ print $1 }')
docker rm $containers_to_delete

бұл хабарламадан .

0
қосылды

Мұнда 2 күндік (немесе бұрынғы) контейнерлерді жоюға арналған сценарий:

#!/bin/bash
# This script will kill and remove containers older than 2 days.
#
docker ps -aq > /scripts/containers.txt
today=`date +%Y-%m-%d`
oldate=`date --date="2 day ago" +%Y-%m-%d`
while read p; do
    cont=`docker inspect -f '{{ .Created }}' $p | cut -c 1-10`
    echo " Created date of $p is $cont"
    k=`echo $(( ( $(date -ud $today +'%s') - $(date -ud $cont +'%s'))/60/60/24 ))
    echo $k
    if [ $k -ge 2 ];
    then
            echo "Killing docker container $p"
            docker kill $p
            echo "Removing docker container $p"
            docker rm $p
    else
            echo "Docker container $p is not one day old, so keeping the container."
    fi
done 
0
қосылды

Доккер-көмекшіні репозиторийден https://github.com/kartoza/docker-helpers. Орнатудан кейін drmc деп теріңіз.

0
қосылды