Докерная машина: на устройстве нет места
Я пытаюсь настроить Docker Machine с помощью Docker Compose.
Сценарий 1 (без докерной машины)
Если я запускаю docker-compose up -d
без Docker Machine, он создает мои 3 связанных контейнера в качестве намеренных (nginx + mongodb + nodejs).
Сценарий 2 (с докерной машиной)
Затем я создаю виртуальную машину с помощью Docker Machine и расскажу Docker о том, чтобы поговорить с этой машиной с помощью eval $(docker-machine env streambacker-dev)
.
В этот момент, если я ssh для моей докерной машины и запустил df -h
, я получаю:
![docker machine df -h]()
Если я запустил docker-compose up -d
, я получаю "без пробела на устройстве" ошибка при загрузке последнего контейнера.
"tmpfs" кажется действительно немного полным после этого:
![docker machine df -h]()
Проверка параметра - virtualbox-disk <размер файла показывает, что он по умолчанию имеет значение 20000 МБ, и я думаю, это то, что мы можем видеть как "/dev/sda1" на обеих картинках. Итак, почему контейнеры заполняют "tmpfs" n и что такое "tmpfs" ? Is является временным каталогом загрузки? Как создать больше пространства для контейнеров?
Спасибо!
Для информации, я использую Docker Machine 0.4.0-rc2 и Docker Compose 1.3.2.
Ответы
Ответ 1
Как сказано выше, tmpfs
не имеет ничего общего с --virtualbox-disk-size
. Кажется, что boot2docker монтирует tmpfs
в память, поэтому вам нужно выделить больше памяти для вашего виртуального бокса vm. Вы можете сделать это, указав параметр --virtualbox-memory
.
--virtualbox-memory "1024"
Size of memory for host in MB [$VIRTUALBOX_MEMORY_SIZE]
по умолчанию:
$ docker-machine create --driver virtualbox testA
Creating VirtualBox VM...
Creating SSH key...
Starting VirtualBox VM...
Starting VM...
$ docker-machine ssh testA
## .
## ## ## ==
## ## ## ## ## ===
/"""""""""""""""""\___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ / ===- ~~~
\______ o __/
\ \ __/
\____\_______/
_ _ ____ _ _
| |__ ___ ___ | |_|___ \ __| | ___ ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__| < __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
Boot2Docker version 1.8.1, build master : 7f12e95 - Thu Aug 13 03:24:56 UTC 2015
Docker version 1.8.1, build d12ea79
[email protected]:~$ df -h /
Filesystem Size Used Available Use% Mounted on
tmpfs 896.6M 112.7M 783.9M 13% /
С --virtualbox-memory
установлено значение 8096
$ docker-machine create --driver virtualbox --virtualbox-memory 8096 testB
Creating VirtualBox VM...
Creating SSH key...
Starting VirtualBox VM...
Starting VM...
$ docker-machine ssh testB
## .
## ## ## ==
## ## ## ## ## ===
/"""""""""""""""""\___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ / ===- ~~~
\______ o __/
\ \ __/
\____\_______/
_ _ ____ _ _
| |__ ___ ___ | |_|___ \ __| | ___ ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__| < __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
Boot2Docker version 1.8.1, build master : 7f12e95 - Thu Aug 13 03:24:56 UTC 2015
Docker version 1.8.1, build d12ea79
[email protected]:~$ df -h /
Filesystem Size Used Available Use% Mounted on
tmpfs 6.9G 112.4M 6.8G 2% /
Ответ 2
У меня была такая же ошибка ([ERROR] InnoDB: Error number 28 means 'No space left on device'
) и решить ее следующим образом:
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}
Ответ 3
Если вы используете версию Docker Community Edition:
удаление докерной системы
Если вы используете boot2docker (docker-machine), очищайте те оси, которые потеряны:
объем докеры rm $(объем докера ls -qf dangling = true)
Удалить неиспользуемые изображения:
docker rmi $(изображения докеров -q -f "dangling = true" )
Ответ 4
а. УДАЛИТЬ НЕОБЫЧНЫЕ ИЗОБРАЖЕНИЯ
используя команды docker rm или docker rmi, вы можете удалить изображения, которые вам не нужны. На самом деле существует изображение, которое помогает в этой задаче (мартины/докеры-чипы-томы). Основой является запуск selectig из списка ваших изображений и контейнеров:
docker ps -a -s
В. ИЗМЕНИТЬ ОПИСАНИЕ DOCKER JSON
он упоминается на некоторых форумах. Идея состоит в том, чтобы увеличить дескриптор, расположенный в ~/.docker/machine/machines/default/config.json. Парам кажется DiskSize, но я не знаю, работает ли он в других ОС (не в Windows).
С. LINUX RESIZE:
в ОС Windows, докер-машина или boot2docker на самом деле виртуальный бокс vm, то вы можете выполнить процедуру для изменения размера диска. Позаботьтесь о резервном копировании файлов.
Общая процедура состоит в том, чтобы сделать изменение размера в виртуальном боксе, а затем использовать утилиту gpartd для изменения пространства, воспринимаемого linux в его разделах.
Есть несколько ссылок для выполнения этой процедуры, приведенной ниже:
Д. RECREATE DOCKER-MACHINE/BOOT2DOCKER
Идея воссоздает стандартную докер-машину. Следующие команды могут вас проиллюстрировать. Обратите внимание, что при повторном создании boot2docker вы потеряете предыдущие загруженные изображения докеров.
docker-machine rm default
docker-machine create --driver virtualbox --virtualbox-disk-size "100100" по умолчанию
docker-machine env default
то вы можете перейти в виртуальную коробку и увидеть пространство boot2docker с помощью команды "df -h"
Ответ 5
В docker osx/мне удалось нажать кнопку
[ Переместить образ диска]
и он успешно переместил Docker.qcow2 (предположительно содержащий контейнеры/изображения)
сначала - когда машины начали - я все еще получал
На ошибке устройства не осталось места
но он разрешился вскоре после этого.