Я установил docker на машину Debian 7 следующим образом
echo deb http://get.docker.io/ubuntu docker main >
/etc/apt/sources.list.d/docker.list
Обновление sudo apt-get 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
Как увеличить память? Где хранятся системные конфигурации?
Из предложений Kal:
Когда я избавился от всех изображений и контейнеров, он освободил некоторое пространство, а сборка изображений продолжилась до сбоя с той же ошибкой. Итак, вопрос в том, какое пространство относится к этому и как его настроить?
У меня была такая же ошибка и решить ее так:
1. Удалите потерянные тома в Docker, вы можете использовать встроенную команду тонера. Встроенная команда также удаляет любую директорию в/var/lib/docker/томах, которая не является томом, поэтому убедитесь, что вы не поместили ничего там, которое вы хотите сохранить.
Предупреждение будьте очень осторожны с этим, если у вас есть данные, которые вы хотите сохранить
Очистка:
$ docker volume rm $(docker volume ls -qf dangling=true)
Дополнительные команды:
Список оборванных томов:
$ docker volume ls -qf dangling=true
Список всех томов:
$ docker volume ls
2. Также рассмотрите удаление всех неиспользуемых изображений.
Сначала избавьтесь от изображений <none>
(они иногда генерируются при создании изображения, и если по какой-либо причине здание изображения было прервано, они остаются там).
вот хороший script я использую для их удаления
docker rmi $(docker images | grep '^<none>' | awk '{print $3}')
Затем, если вы используете Docker Compose для создания изображений локально для каждого проекта. В итоге вы получите много изображений, обычно называемых вашей папкой (например, если ваша папка проекта с именем Hello, вы найдете имя изображения Hello_blablabla
). поэтому также рассмотрите возможность удаления всех этих изображений
вы можете редактировать приведенные выше script, чтобы удалить их или удалить их вручную с помощью
docker rmi {image-name}
Убедитесь, что у вас есть свободное место в /var, так как Docker сохраняет файлы изображений по умолчанию (в/var/lib/docker).
Сначала очистите содержимое, используя docker ps -a
, чтобы перечислить все контейнеры (включая остановленные) и docker rm
, чтобы удалить их; затем используйте docker images
, чтобы перечислить все сохраненные вами изображения и docker rmi
, чтобы удалить их.
Затем измените место хранения с помощью опции -g на демере докеров или отредактировав /etc/default/docker
и добавив параметр -g
в DOCKER_OPTS
. -g
указывает местоположение "Время выполнения Docker", которое в основном является всем, что создает Docker при создании изображений и запусках контейнеров. Выберите место с большим количеством места, поскольку используемое дисковое пространство будет со временем расти. Если вы отредактируете /etc/default/docker
, вам нужно будет перезапустить демона докеров, чтобы изменения вступили в силу.
Теперь вы сможете создать новое изображение (или вытащить его из Docker Hub), и вы увидите, что в каталоге, указанном с параметром -g, создается куча файлов.
UPDATE
Нижеприведенные команды стали взломать, поскольку Docker становится более развитым. Текущая лучшая практика -
docker system prune
Это приведет к удалению:
- all stopped containers
- all volumes not used by at least one container
- all networks not used by at least one container
- all dangling images
Как показано ниже, это ядерное.
Чтобы очистить систему, сначала удалите контейнеры
$ docker rm $(docker ps -aq)
затем удалите изображения
$ docker rmi $(docker images -q)
Это, конечно, ядерное и удалит все контейнеры и все изображения. Вы можете удалить их по одному с помощью docker rm #CONTAINER_ID#
и docker rmi #IMAGE_ID
.
df -ih
. Для более ncdu
диагностики введите ncdu
затем нажмите c для подсчета файлов и C для сортировки по количеству файлов, чтобы получить приблизительную оценку того, что использует все ваши inode. Если проблема действительно в докере, это будет сразу видно по каталогам, использующим наибольшее количество инодов.
Если это просто тестовая установка 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
. Версия xargs
OS X BSD поддерживает опцию -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):
docker system prune -a -f
если этого недостаточно, можно сначала удалить запущенные контейнеры:
docker rm -f $(docker ps -a -q)
docker system prune -a -f
увеличение/var/lib/docker или использование другого места с большим пространством также является хорошей альтернативой для избавления от этой ошибки (см. Как изменить каталог установки образа docker?)
docker system prune
не удаляет тома.
docker system prune -a -f --volumes
удаления docker system prune -a -f --volumes
удалит тома.
В ваших группах включен контроллер cpuset
. Этот контроллер в основном полезен в среде NUMA, где он позволяет точно определить, в каком ЦП/БД памяти ваши задачи разрешены.
По умолчанию обязательные cpuset.mems
и cpuset.cpus
не установлены, что означает, что для вашей задачи нет "свободного места", следовательно, ошибка.
Самый простой способ исправить это - включить cgroup.clone_children
в 1 в корневой группе. В вашем случае это должно быть
echo 1 > /sys/fs/cgroup/docker/cgroup.clone_children
В основном он поручит системе автоматически инициализировать контейнер cpuset.mems
и cpuset.cpus
из своей родительской группы.
echo 0 > /sys/fs/cgroup/cpuset/system.slice/cpuset.mems
- « echo 0 > /sys/fs/cgroup/cpuset/system.slice/cpuset.mems
вы также можете использовать:
docker system prune
или только для томов:
docker volume prune
Если вы используете образ boot2docker через Docker Toolkit, проблема возникает из-за того, что на виртуальной машине boot2docker закончилось свободное пространство.
Когда вы делаете docker import
или добавляете новое изображение, изображение копируется в /mnt/sda1
, который мог бы быть заполнен.
Один из способов проверить, какое пространство у вас есть на изображении, - это ssh в vm и запустить df -h
и проверить оставшееся пространство в /mnt/sda 1
Команда ssh
docker-machine ssh default
Как только вы уверены, что это действительно проблема с пространством, вы можете либо очистить в соответствии с инструкциями в некоторых ответах по этому вопросу, либо вы можете изменить размер самого изображения boot2docker, увеличив пространство на /mnt/sda1
Здесь вы можете выполнить инструкции по изменению размера изображения https://gist.github.com/joost/a7cfa7b741d9d39c1307
1) Очистить оборванные изображения
docker rmi $(изображения докеров -f "dangling = true" -q)
2) Удалите ненужные тома
2) Удалить неиспользуемые изображения
2) Удалить неиспользуемые контейнеры
чистый докер, используя
docker images --no-trunc | grep '<none>' | awk '{ print $3 }' \
| xargs docker rm
df -ih