Я пытаюсь настроить Docker Machine с помощью Docker Compose.
Сценарий 1 (без Docker Machine)
Если я работаю docker-compose up -d
без Docker Machine, он создает мои 3 связанных контейнера как задумано (nginx + mongodb + nodejs).
Сценарий 2 (с Docker Machine)
Затем я создаю виртуальную машину с помощью Docker Machine и приказываю Docker разговаривать с этой машиной eval $(docker-machine env streambacker-dev)
.
На этом этапе, если я подключу ssh к своей докер-машине и запускаю df -h
, я получаю:
Если затем запустить docker-compose up -d
, то при загрузке последнего контейнера я получаю сообщение об ошибке «На устройстве не осталось места» .
После этого "tmpfs" кажется действительно переполненным:
Проверка опции --virtualbox-disk-size показывает, что по умолчанию установлено значение 20000 МБ, что, как мне кажется, мы видим как «/ dev / sda1» на обоих изображениях. Так почему контейнеры заполняют «tmpfs» и что такое «tmpfs»? Это временный каталог для загрузки? Как я могу освободить место для моих контейнеров?
Спасибо!
Для информации я использую Docker Machine 0.4.0-rc2 и Docker Compose 1.3.2 .
источник
tmpfs
имеет ничего общего с--virtualbox-disk-size
. Это файловая система (например, RAM-диск), смонтированная в памяти, и ничто не имеет доступа к вашему диску.docker rmi $(docker images -f dangling=true -q)
иdocker volume rm $(docker volume ls -f dangling=true -q)
Ответы:
Как сказано выше, это не
tmpfs
имеет отношения к--virtualbox-disk-size
. Похоже, что boot2docker монтируетсяtmpfs
в память, поэтому вам нужно выделить больше памяти для виртуальной машины virtualbox. Вы можете сделать это, указав--virtualbox-memory
параметр.Значения по умолчанию:
С
--virtualbox-memory
установленным на8096
источник
У меня была такая же ошибка (
[ERROR] InnoDB: Error number 28 means 'No space left on device'
), и я решил ее так:1. Удалить потерянные тома в Docker можно с помощью встроенной команды docker volume. Встроенная команда также удаляет любой каталог в / var / lib / docker / volume, который не является томом, поэтому убедитесь, что вы не поместили туда ничего, что хотите сохранить.
Предупреждение, будьте очень осторожны с этим, если у вас есть данные, которые вы хотите сохранить
Очистка:
Дополнительные команды:
Список оборванных томов:
Перечислить все тома:
2. Также рассмотрите возможность удаления всех неиспользуемых изображений.
Сначала избавьтесь от
<none>
изображений (они иногда создаются при построении изображения, и если по какой-либо причине построение изображения было прервано, они остаются там).вот хороший скрипт, который я использую для их удаления
Затем, если вы используете Docker Compose для локального создания изображений для каждого проекта. У вас будет много изображений, обычно называемых как ваша папка (например, если ваша папка проекта называется Hello, вы найдете имя изображения
Hello_blablabla
). так что также рассмотрите возможность удаления всех этих изображенийвы можете отредактировать приведенный выше сценарий, чтобы удалить их или удалить вручную с помощью
docker rmi {image-name}
источник
docker rmi $(docker images | grep '^<none>' | awk '{print $3}')
. Удаление остановленных контейнеров можно выполнить,docker rm $(docker ps -qa --no-trunc --filter "status=exited")
как описано здесь: stackoverflow.com/a/32723127/619659 .docker images | grep "^<none>" | xargs docker rmi
.docker volume prune
Если вы используете Docker Community Edition:
Если вы используете boot2docker (docker-machine), очистите потерянные тома:
Очистить неиспользуемые изображения:
источник
docker system prune
помог мнеdocker system prune
ftwdocker volume prune
только для томов, системная обрезка не удалит «болтающиеся» тома.docker rmi $(docker images -q)
. Добавьте,--force
если необходимо, когда он пропускает группу слоев, включенных в несколько контейнеров.A. УДАЛИТЬ НЕИСПОЛЬЗУЕМЫЕ ИЗОБРАЖЕНИЯ
с помощью команд docker rm или docker rmi вы можете удалить ненужные изображения. На самом деле существует образ, который помогает в этой задаче (martin / docker-cleanup-volume). Основа - начать выбор из списка ваших изображений и контейнеров:
Б. ИЗМЕНИТЬ ДИСКРИПТОР JSON ДОКЕРА
это упоминается на некоторых форумах. Идея состоит в том, чтобы увеличить дескриптор, расположенный в ~ / .docker / machine / machines / default / config.json. Параметр кажется DiskSize, но я не знаю, работает ли он в других ОС (не в Windows).
ИЗМЕНИТЬ РАЗМЕР LINUX:
в ОС Windows докер-машина или boot2docker на самом деле представляет собой виртуальную машину виртуального бокса, тогда вы можете выполнить процедуру, чтобы изменить размер диска. Позаботьтесь о резервном копировании файлов. Общая процедура состоит в том, чтобы изменить размер виртуального бокса, а затем использовать утилиту под названием gpartd для изменения пространства, воспринимаемого linux в своих разделах. Ниже приведены ссылки для выполнения этой процедуры:
D. СОЗДАТЬ ДОКЕР-МАШИНУ / BOOT2DOCKER
Идея состоит в том, чтобы воссоздать докер-машину по умолчанию. Следующие команды могут вас проиллюстрировать. Обратите внимание, что при повторном создании boot2docker вы потеряете предыдущие загруженные образы докеров.
затем вы можете перейти в виртуальный ящик и увидеть пространство boot2docker с помощью команды "df -h"
источник
В docker osx / я смог нажать кнопку [ Переместить образ диска ], и он успешно переместил Docker.qcow2 (предположительно содержащий контейнеры / изображения)
изначально - когда машины запускались - я все еще получал ошибку Нет места на устройстве, но вскоре она разрешилась.
источник
Я столкнулся с этой проблемой и не смог добавить дополнительное пространство с помощью пользовательского интерфейса докера для Mac, я установил докер с помощью homebrew и выполнил следующую команду при создании своей машины:
docker-machine create --driver virtualbox --virtualbox-memory "2048" --virtualbox-disk-size "40000" default
это добавляет вдвое больше места для памяти и размера диска к виртуальному ящику, который у меня был раньше, и вы можете добавить здесь размер настроек, который вам нужен, как вы считаете нужным
источник