На устройстве нет свободного места из-за докера / cron - PullRequest
0 голосов
/ 30 мая 2019

У меня есть базовый сервер в облаке Google, который запускает докер-контейнер через cron каждые 30 минут. Я заметил, что команда docker перестала работать, и я получил сообщение об ошибке

docker: Error response from daemon: no space left on device.

Затем я заметил, что получил эту ошибку, даже когда пытался выполнить автозаполнение в bash, набрав cd path/ и нажав tab. Я понял, что с хранилищем что-то не так, поэтому я попытался df -h, и это показало следующее:

Filesystem      Size  Used Avail Use% Mounted on
udev            860M     0  860M   0% /dev
tmpfs           175M   19M  157M  11% /run
/dev/sda1       9.7G  9.7G     0 100% /        
tmpfs           871M     0  871M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           871M     0  871M   0% /sys/fs/cgroup
tmpfs           175M     0  175M   0% /run/user/1001

Как видите, по какой-то причине / dev / sda1 заполнен на 100%. Почему это происходит и как я могу это исправить?

Я заметил, что было несколько тысяч вышедших из докеров контейнеров, поэтому я удалил это с помощью этой команды:

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

Теперь использование хранилища составляет 61%, что все еще слишком высоко.

1 Ответ

1 голос
/ 30 мая 2019

При запуске контейнеров, которые вам не нужно держать в остановленном состоянии, рекомендуется использовать docker run --rm ... для автоматической очистки остановленного контейнера.

Если контейнер генерирует тома, видимые в docker volume ls, вы, вероятно, захотите очистить их, когда данные больше не нужны. при включенном флаге --rm анонимные тома (которые отображаются как длинные уникальные идентификаторы) будут автоматически удалены.

Docker также предоставляет команду:

docker system prune

, который вы можете автоматизировать для очистки изображений, контейнеров, сетей и даже томов. Обратите внимание, что вам нужно время, чтобы понять, что делает эта команда, прежде чем запускать ее, особенно перед ее автоматизацией При написании этой команды вы можете использовать флаг -f, чтобы пропустить приглашение.

Перед запуском чернослива вы можете проверить:

docker system df

чтобы узнать, сколько диска используется каждым компонентом, и у каждого компонента есть своя собственная команда удаления, например, docker container prune и docker volume prune, если вы хотите очистить только одну область.

Подробнее о команде prune см .: https://docs.docker.com/engine/reference/commandline/system_prune/

...