Я установил Docker на машину с Debian 7 следующим образом
$ echo deb http://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list
$ sudo apt-get update
$ curl -sSL https://get.docker.com/ubuntu/ | sudo sh
После этого, когда я впервые попытался создать изображение, он потерпел неудачу со следующей ошибкой
time="2015-06-02T14:26:37-04:00" level=info msg="[8] System error: write /sys/fs/cgroup/docker/01f5670fbee1f6687f58f3a943b1e1bdaec2630197fa4da1b19cc3db7e3d3883/cgroup.procs: no space left on device"
Вот информация о докере
Containers: 2
Images: 21
Storage Driver: aufs
Root Dir: /var/lib/docker/aufs
Backing Filesystem: extfs
Dirs: 25
Dirperm1 Supported: true
Execution Driver: native-0.2
Kernel Version: 3.16.0-0.bpo.4-amd64
Operating System: Debian GNU/Linux 7 (wheezy)
CPUs: 2
Total Memory: 15.7 GiB
WARNING: No memory limit support
WARNING: No swap limit support
Как я могу увеличить память? Где хранятся конфигурации системы?
Из предложений Кэла:
Когда я избавился от всех изображений и контейнеров, он освободил немного места, и сборка изображений продолжалась дольше, чем заканчивалась с той же ошибкой. Итак, вопрос в том, к какому пространству это относится и как мне его настроить?
df -ih
Ответы:
У меня была такая же ошибка, и я решил ее следующим образом:
1 Удалите потерянные тома в Docker, вы можете использовать встроенную команду тома Docker. Встроенная команда также удаляет любой каталог в / var / lib / docker / volume, который не является томом, поэтому убедитесь, что вы не поместили туда ничего, что хотите сохранить.
Предупреждение, будьте очень осторожны с этим, если у вас есть данные, которые вы хотите сохранить
Очистка:
Дополнительные команды:
Список висящих томов:
Перечислите все тома:
2 Также рассмотрите возможность удаления всех неиспользуемых изображений.
Сначала избавьтесь от
<none>
изображений (они иногда создаются при создании изображения, и если по какой-либо причине создание изображения было прервано, они остаются там).вот хороший скрипт, который я использую, чтобы удалить их
Затем, если вы используете Docker Compose для создания изображений локально для каждого проекта. В итоге у вас будет много изображений, обычно именуемых как ваша папка (например, если папка вашего проекта называется Hello, вы найдете имя изображения
Hello_blablabla
). так что также рассмотрите возможность удаления всех этих изображенийВы можете отредактировать вышеуказанный скрипт, чтобы удалить их или удалить их вручную с помощью
docker rmi {image-name}
источник
docker images -qf dangling=true
и, конечно, удалить их с помощьюdocker rmi $(docker images -qf dangling=true)
.ОБНОВЛЕНИЕ
Команды ниже стали хаки, поскольку Docker становится более развитым. Текущая лучшая практика
Это удалит:
Как показано ниже, это ядерное оружие.
Чтобы очистить вашу систему, сначала удалите контейнеры
затем удалите изображения
Это, конечно, ядерное и удалит все контейнеры и все изображения. Вы можете удалить их по одному через
docker rm #CONTAINER_ID#
иdocker rmi #IMAGE_ID
.источник
df -ih
. Чтобы выполнить более хирургическую диагностику, введите,ncdu
затем нажмите c для подсчета файлов и C для сортировки по количеству файлов, чтобы получить приблизительную оценку того, что использует все ваши inode. Если проблема действительно в докере, это будет сразу видно по каталогам, использующим наибольшее количество инодов.docker system prune
Убедитесь, что у вас есть свободное место в / var, так как именно здесь Docker хранит файлы изображений по умолчанию (в / var / lib / docker).
Сначала очистите содержимое, используя
docker ps -a
список всех контейнеров (включая остановленные) иdocker rm
удалите их; затем используйтеdocker images
для отображения всех сохраненных изображений иdocker rmi
их удаления.Затем измените место хранения с помощью опции -g в демоне docker или отредактировав
/etc/default/docker
и добавив эту-g
опцию вDOCKER_OPTS
.-g
указывает местоположение «среды выполнения Docker», которая в основном является всем, что Docker создает при создании образов и запуске контейнеров. Выберите место с достаточным пространством, поскольку используемое дисковое пространство будет со временем увеличиваться. Если вы редактируете/etc/default/docker
, вам нужно будет перезапустить демон docker, чтобы изменения вступили в силу.Теперь вы сможете создавать новый образ (или извлекать его из Docker Hub) и видеть, как в каталоге, указанном с помощью опции -g, создается куча файлов.
источник
docker ps -a
дляdocker rm
вывода списка всех контейнеров (включая вышедшие), а затем для их удаления. Используйтеdocker images
для отображения всех изображений, а затемdocker rmi
для их удаления. Надеюсь, это должно очистить все (или большинство вещей).Как уже упоминалось,
помогает, но с Docker 17.06.1 и более поздними версиями без удаления неиспользуемых томов. Начиная с Docker 17.06.1, следующая команда также удаляет тома:
Из документации Docker: https://docs.docker.com/config/pruning/
Если вы хотите сократить объемы и сохранить изображения и контейнеры:
источник
docker volume prune
помог мне сегодня, когда все другие решения здесь перестали работать.Если это просто тестовая установка Docker (т.е. не производственная) и вам не нужна ядерная очистка, вы можете:
очистить все контейнеры:
docker ps -a | sed '1 d' | awk '{print $1}' | xargs -L1 docker rm
очистить все изображения:
docker images -a | sed '1 d' | awk '{print $3}' | xargs -L1 docker rmi -f
Опять же, я использую это в своих экземплярах ec2 при разработке Docker, а не в каком-либо серьезном QA или производственном пути. Самое замечательное, что если у вас есть Dockerfile, его легко восстановить и или
docker pull
.источник
docker images -a | sed '1 d' | awk '{print $3}' | xargs docker rmi -f
. Версия OS X BSDxargs
поддерживает эту-L
опцию, в отличие от версии boot2docker.docker ps -a -q
и т. Д., Чтобы избежать текстовых манипуляций, т.е.docker rm $(docker ps -a -q); docker rmi -f $(docker images -a -q)
должны делать свое делоудалить сразу все неиспользуемые контейнеры, тома, сети и образы ( https://docs.docker.com/engine/reference/commandline/system_prune/#related-commands ):
если этого недостаточно, можно сначала удалить запущенные контейнеры:
увеличение / var / lib / docker или использование другого места с большим количеством места также является хорошей альтернативой, чтобы избавиться от этой ошибки (см. Как изменить каталог установки образа docker? )
источник
docker system prune
не удаляет томаdocker system prune -a -f --volumes
удалит тома.Докер для Mac
Так
docker system prune
иdocker system prune --volumes
предлагалось в других ответах освобождать какое-то место каждый раз, но в конце концов каждый раз, когда я запускал что-либо, я получал ошибку.Что действительно исправило проблему с корнем, так это удаление
Docker.raw
файла, который Docker для Mac использует для хранения, и перезапуск его.Чтобы найти этот файл, откройте Docker для Mac и перейдите к *
В более новых версиях Docker для Mac ** он показывает фактический размер этого файла на диске прямо в интерфейсе пользователя, а также его максимальный выделенный размер. Вы, вероятно, увидите, что это массивно. Например на моей машине было 41Гб !
Я удалил
Docker.raw
, перезапустил Docker для Mac, и файл был автоматически создан снова и вернулся к размеру 0 ГБ .Все продолжало работать, как и раньше , хотя, конечно, я потерял кэш Docker. Как и ожидалось, после запуска нескольких команд Docker файл снова начал заполняться несколькими гигабайтами, но не ближе 41 Гб.
Обновить
Через несколько месяцев мой
Docker.raw
снова наполнился до такого же размера. Таким образом, этот метод работал, но должен повторяться каждые несколько месяцев. Для меня это хорошо.Примечание о том, почему это работает - я должен предположить, что это ошибка в Docker для Mac. На самом деле кажется, что
docker system prune
/docker system prune --volumes
должен полностью очистить содержимое этого файла, но, похоже, файл накапливает другие данные, которые не могут быть удалены этими командами. Во всяком случае, удаление его вручную решает проблему!источник
Докер оставляет повсюду изображения, которые могут занять ваше пространство. Чтобы очистить после Docker, выполните следующее:
или с более старыми версиями Docker:
Это удалит вышедшие и свисающие изображения, которые, мы надеемся, очистят пространство устройства.
источник
docker rmi $(docker images -f "dangling=true" -q)
источник
Вы также можете использовать:
или только для томов:
источник
В моем случае установка ubuntu-server 18.04.1 [по какой-то странной причине] создала логический том LVM размером всего 4 ГБ вместо 750 ГБ. Поэтому при извлечении изображений я получаю эту ошибку "нет места на устройстве". Исправить это просто:
источник
Я также столкнулся с этой проблемой на машине RHEL. Я не нашел ни одного подходящего решения для сообщества переполнения стека и Docker-Hub. Если вы столкнулись с этой проблемой даже после команды ниже:
докер системы чернослив - все
Решение, которое сработало окончательно:
источник
Очистите Docker с помощью следующей команды:
источник
Ваши cgroups имеют
cpuset
включенный контроллер. Этот контроллер в основном полезен в среде NUMA, где он позволяет точно указать, какой процессор / банк памяти разрешено запускать вашим задачам.По умолчанию они обязательны
cpuset.mems
иcpuset.cpus
не установлены, что означает, что для вашей задачи «не осталось места», следовательно, ошибка.Самый простой способ исправить это - включить
cgroup.clone_children
1 в корневой группе. В вашем случае это должно бытьОн в основном будет указывать системе автоматически инициализировать контейнеры
cpuset.mems
иcpuset.cpus
их родительскую группу.источник
echo 0 > /sys/fs/cgroup/cpuset/system.slice/cpuset.mems
Если вы используете образ boot2docker с помощью Docker Toolkit, то проблема заключается в том, что виртуальной машине boot2docker не хватило места.
Когда вы делаете
docker import
или добавляете новое изображение, оно копируется в то,/mnt/sda1
что могло быть заполнено.Один из способов проверить, какое место у вас доступно на образе, это зайти в vm по ssh, запустить
df -h
и проверить оставшееся пространство в / mnt / sda1Команда ssh
docker-machine ssh default
Если вы уверены, что это действительно проблема с пространством, вы можете либо выполнить очистку в соответствии с инструкциями в некоторых ответах на этот вопрос, либо вы можете изменить размер самого образа boot2docker, увеличив пространство на
/mnt/sda1
Вы можете следовать инструкциям здесь, чтобы сделать изменение размера изображения https://gist.github.com/joost/a7cfa7b741d9d39c1307
источник
Если вы используете Docker Desktop, вы можете увеличить размер образа диска в дополнительных настройках , перейдя в « Настройки Docker» .
Вот скриншот с macOS:
источник
Это может быть связано с тем, что в хранилище по умолчанию установлено 40 ГБ (путь по умолчанию, / var / lib / docker)
Вы можете изменить объем хранилища, чтобы указать другой путь
DOCKER_STORAGE_OPTIONS = '- драйвер хранилища = оверлей --graph = CUSTOM_PATH'
если вы запустите команду docker info (она должна показывать драйвер хранилища как оверлей)
источник
Кажется, есть несколько способов, которыми это может произойти. Проблема, с которой я столкнулся, заключалась в том, что образ диска докера достиг максимального размера (Docker Whale -> Preferences -> Disk, если вы хотите посмотреть, какой размер у OSX).
Я поднял предел и был готов идти. Я уверен, что очистка неиспользуемых изображений также подойдет.
источник
Я запускаю следующие команды.
После этого нет необходимости перестраивать изображения.
Они удаляют вышедшие / висящие контейнеры и висячие тома.
источник
Для меня
docker system prune
сделали свое дело. Я бегу Mac OS.источник
docker volume ls
ничего не возвращало, поэтому казалось, что хранилище в основном использовалось кешами и висящими изображениями.Это сработало для меня
кажется, лучший вариант с последней версией
источник