Чи повинен я турбуватися про зайві, не працюючі контейнери Docker?


142

Кожна docker runкоманда або кожна RUNкоманда всередині Dockerfile створює контейнер. Якщо контейнер більше не працює, його все одно можна побачити docker ps -a.

Чи повинен я перейматися наявністю величезного списку не працюючих контейнерів? Чи слід видавати docker rmна не працюючі контейнери?

Я не впевнений, які штрафи за продуктивність або пам'ять / зберігання несуть ці непрацюючі контейнери.


1
docker execКоманда була додана нещодавно, см docs.docker.com/reference/commandline/cli/#exec - він буде виконувати команду від запущеного контейнера.
шмон

FYI, якщо ви хочете дізнатися, як видалити старі контейнери, дивіться це запитання: stackoverflow.com/questions/17236796/…
Ryan Walls

1
@schmunk Посилання перейшло. docs.docker.com/engine/reference/commandline/exec
akauppi

Відповіді:


72

Контейнери, які не працюють, не беруть жодних системних ресурсів, крім місця на диску.

Зазвичай добре прибирати за собою, але якщо у вас багато таких, що сидять навколо, це зовсім не може сповільнювати продуктивність.

Якщо ви помітили уповільнення роботи під час виконання команд docker з великою кількістю зупинених контейнерів, це може бути помилка в docker, і вам слід надіслати помилку.


1
Документи для RUNкоманди тепер перенесли на: docs.docker.io/en/latest/reference/builder/#run
aculich

63

docker runДокументація описує , як автоматично очистити контейнер і видалити файлову систему , коли контейнер виходить:

  --rm=false: Automatically remove the container when it exits (incompatible with -d)

Вищесказане показує, що контейнери за замовчуванням не видаляються, але додавання --rm=trueабо просто коротке русло --rmбуде працювати так:

sudo docker run -i -t --rm ubuntu /bin/bash

Після виходу з контейнера він буде автоматично видалений.

Ви можете перевірити це, вказавши контейнери докера в одному вікні терміналу:

watch -n1 'sudo ls -c /var/lib/docker/containers'

А потім в іншому вікні запустіть цю команду для запуску декількох докерних контейнерів, які автоматично вийдуть після сну протягом 10 секунд.

for i in {1..10}; do sudo docker run --rm ubuntu /bin/sleep $i & done

4
Не пряма відповідь на запитання , а цікава відповідь, яка дасть користувачам деяке розуміння механізмів, які стоять за докером. Дякую!
thaJeztah

3
-rmзастаріло і буде видалено через деякий час, використовуйте --rmзамість цього.
bain

5

Якщо ви запустите контейнер з об'ємом і не використовуєте docker rm -v для його видалення, то обсяг не видаляється після видалення контейнера. Також є проблема з драйвером зберігання vfs. Якщо ви забудете очистити, томи будуть витрачати на диску ваш простір.


2

Я не впевнений, які штрафи за продуктивність або пам'ять / зберігання несуть ці непрацюючі контейнери.

Для того, щоб оцінити, скільки використовуються не запущені контейнери Docker, ви можете запустити:

docker ps --size --filter "status=exited"

Ви рівнозначно можете запускати:docker container ls --filter "status=exited"

Ви також можете скористатися командою docker system df(введеною в Docker 1.13.0, січень 2017), щоб побачити використання диска докер, наприклад:

username@server:~$ docker system df
TYPE                TOTAL               ACTIVE              SIZE                RECLAIMABLE
Images              44                  28                  114.7GB             84.84GB (73%)
Containers          86                  7                   62.43GB             41.67GB (66%)
Local Volumes       2                   1                   0B                  0B
Build Cache                                                 0B                  0B
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.