Докер-машина: на пристрої не залишилося місця


126

Я намагаюся налаштувати Docker Machine за допомогою Docker Compose.

Сценарій 1 (без Docker Machine)
Якщо я запускаю docker-compose up -dбез Docker Machine, він створює 3 пов'язані контейнери як наміри (nginx + mongodb + nodejs).

Сценарій 2 (за допомогою Docker Machine)
Потім я створю VM за допомогою Docker Machine і кажу докеру поговорити з цією машиною eval $(docker-machine env streambacker-dev).

У цей момент, якщо я сш на свій докер-автомат і запускаю df -h, я отримую:

докер-машина df -h

Якщо я запускаю docker-compose up -d, під час завантаження останнього контейнера я отримую помилку "не залишається місця на пристрої" .

Здається, "tmpfs" після цього справді трохи заповнений:

докер-машина df -h

Перевірка параметра --virtualbox-disk-size показує, що він за замовчуванням становить 20000 Мб, що, на мою думку, ми можемо бачити як "/ dev / sda1" на обох знімках. Так чому контейнери заповнюють "tmpfs" n і що саме таке "tmpfs"? Це тимчасовий каталог завантажень? Як я можу створити більше місця для своїх контейнерів?

Дякую!

Для інформації я використовую Docker Machine 0.4.0-rc2 та Docker Compose 1.3.2 .


4
Не tmpfsмає нічого спільного --virtualbox-disk-size. Це файлова система (як диск RAM), встановлена ​​в пам'яті, і нічого там не має доступу до вашого диска.
0x7d7b

Дякую @ h3nrik за цю інформацію.
Марк Перрін-Пелтьє

2
перевірте, чи звисають матеріали докера, як висячі зображення, звисаючі томи та видаліть їх. docker rmi $(docker images -f dangling=true -q)іdocker volume rm $(docker volume ls -f dangling=true -q)
Джинна Балу

Відповіді:


87

Як сказано вище, це tmpfsнічого спільного --virtualbox-disk-size. Схоже, boot2docker вмонтовується tmpfsв пам'ять, тому вам потрібно присвятити більше пам'яті для вашого virtualbox 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
docker@testA:~$ 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
docker@testB:~$ df -h /
Filesystem                Size      Used Available Use% Mounted on
tmpfs                     6.9G    112.4M      6.8G   2% /

14
Не дуже інтуїтивно, але це спрацювало. Що за чорт, Докер?
BastiBen

1
Насправді не інтуїтивно зрозуміло! Однак це, здається, є проблема в цьому і вирішив це для мене. Отже, +1.
Рей Пендерграф

Виправлена ​​проблема і для мене, я не розумію як, але, дякую!
Бендіхоссан

Будь-який спосіб збільшити розмір за замовчуванням, щоб мені не потрібно було вказувати його вручну кожен раз?
CGFoX

124

У мене була така ж помилка ( [ERROR] InnoDB: Error number 28 means 'No space left on device') і вирішити її так:

1. Видаливши осиротілі томи в Докер, ви можете використовувати вбудовану команду гучності докер. Вбудована команда також видаляє будь-який каталог у / var / lib / docker / volumes, який не є томом, тому переконайтесь, що ви там нічого не помістили, що хочете зберегти.

Попередження будьте дуже обережні, якщо у вас є деякі дані, які ви хочете зберегти

Прибирати:

$ docker volume rm $(docker volume ls -qf dangling=true)

Додаткові команди:

Перерахуйте звисаючі томи:

$ docker volume ls -qf dangling=true

Список усіх томів:

$ docker volume ls

2. Також розгляньте можливість видалення всіх невикористаних зображень.

Спочатку позбудьтесь <none>зображень (вони іноді генеруються під час створення зображення, і якщо з будь-якої причини побудова зображення була перервана, вони залишаються там).

ось хороший сценарій, який я використовую для їх видалення

docker rmi $(docker images | grep "^<none>" | awk '{print $3}')

Тоді якщо ви використовуєте Docker Compose для створення зображень локально для кожного проекту. Ви отримаєте безліч зображень, як правило, названих як ваша папка (наприклад, якщо ваша папка проекту називається Hello, ви знайдете ім'я зображень Hello_blablabla). тому також розгляньте можливість видалення всіх цих зображень

ви можете відредагувати вищезазначений сценарій, щоб видалити їх або видалити їх вручну

docker rmi {image-name}


3
На Mac я повинен був використовувати одиничні лапки ( ') навколо значень аргументу: docker rmi $(docker images | grep '^<none>' | awk '{print $3}'). Видалення зупинених контейнерів можна виконати, docker rm $(docker ps -qa --no-trunc --filter "status=exited")як описано тут: stackoverflow.com/a/32723127/619659 .
Webdevotion

1
У мене було стільки невикористаних зображень, я досяг границі символів моєї оболонки. Тому я і зробив docker images | grep "^<none>" | xargs docker rmi.
Маттіас Браун

1
Видалення непотрібних зображень допомогло мені.
akauppi

docker volume prune
Justin.m.chase

.. див. мій покроковий опис щодо зміни розміру / var / lib / docker за допомогою resize2fs в іншій потоці: stackoverflow.com/questions/32485723/…
Alex

66

Якщо ви використовуєте Docker Community Edition:

 docker system prune
 docker volume prune  # as suggested by @justin-m-chase since system prune does not clean volumes.

Якщо ви використовуєте boot2docker (docker-machine), очистіть томи, які є сиротами:

 docker volume rm $(docker volume ls -qf dangling=true)

Очистити невикористані зображення:

 docker rmi $(docker images -q -f "dangling=true")

6
docker system pruneдопоміг мені
Максим Єфремов

2
docker system pruneftw
Гільдія Майкла

1
docker volume pruneдля просто обсягів, системна чорнослив не очистить звисаючі обсяги.
Justin.m.chase

Коли вище не ясно вам достатньо місць, ось ядерний варіант: docker rmi $(docker images -q). Додайте, --forceякщо потрібно, коли він пропускає купу шарів, що входять до кількох контейнерів.
EmptyArsenal

14

А. ВИДАЛУЙТЕ НЕВИКОРИСТАННІ Зображення

за допомогою команд docker rm або docker rmi ви можете видалити зображення, які вам не потрібні. Насправді існує образ, який допомагає в цьому завданні (martin / docker-cleanup-volumes). Основа - почати selectig зі списку ваших зображень та контейнерів:

docker ps -a -s

B. МОДИФІКУЙТЕ ОПИСНИК ДЖОНУ ДЖОКЕРА

це згадується на деяких форумах. Ідея полягає у збільшенні дескриптора, розміщеного в ~ / .docker / machine / machine / default / config.json. Парам здається DiskSize, але я не знаю, чи працює він в інших ОС (не в Windows).

C. LINUX RESIZE:

в ОС Windows, докер-машина або boot2docker насправді є virtualbox vm, тоді ви можете дотримуватися процедури зміни розміру диска. Подбайте про резервну копію файлів. Загальна процедура полягає в тому, щоб змінити розмір у virtualbox і потім використовувати утиліту, яку називають gpartd, щоб змінити простір, сприйнятий linux у своїх розділах. Нижче наведено декілька посилань на виконання цієї процедури:

D. ВІДНОСНУЙТЕ КОМАНДУ-МАШИНУ / BOOT2DOCKER

Ідея полягає у відтворенні докер-машини за замовчуванням. Наступні команди можуть проілюструвати вас. Зауважте, що при створенні boot2docker ви втратите попередні завантажені зображення докера.

docker-machine rm за замовчуванням

docker-machine створити --driver virtualbox --virtualbox-disk розміром "100100" за замовчуванням

docker-machine env за замовчуванням

тоді ви можете перейти до віртуального вікна і побачити простір boot2docker з командою "df -h"


Дякую. Я працював над Windows. Я зробив це, відтворивши докер-автомат.
КіноП

Допомогла D: (відтворила докерну машину)
StanislavL

Дякую, відтворюючи докер-автомат працював на мене (я на вікнах)
Lucha Laura Hardie

Я відчуваю дуже багато кохання!
eduyayo

2

На docker osx / мені вдалося натиснути кнопку [ Move Disk Image ] і він успішно перемістив Docker.qcow2 (імовірно, містить контейнери / зображення)

введіть тут опис зображення спочатку - коли запускалися машини - я все ще не мав місця на помилку пристрою, але це вирішилося незабаром після.


0

Я зіткнувся з цією проблемою і не зміг додати додаткового місця в інтерфейсі докера для Mac, я встановив докер з домашньою мовою і запустив наступну команду під час створення своєї машини:

docker-machine create --driver virtualbox --virtualbox-memory "2048" --virtualbox-disk-size "40000" default

це додає вдвічі більше місця для пам’яті та розміру диска до віртуальної скриньки, яку я мав раніше, і ви можете додати тут розмір налаштувань, який вам потрібен, як ви вважаєте за потрібне

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.