Docker Machine: ไม่มีพื้นที่เหลือบนอุปกรณ์


126

ฉันกำลังพยายามตั้งค่า Docker Machine ด้วย Docker Compose

สถานการณ์ที่ 1 (โดยไม่ใช้ Docker Machine)
หากฉันรันdocker-compose up -dโดยไม่ใช้Docker Machine มันจะสร้างคอนเทนเนอร์ที่เชื่อมโยง 3 ของฉันเป็น intented (nginx + mongodb + nodejs)

สถานการณ์ที่ 2 (มีหาง Machine)
แล้วฉันสร้าง VM eval $(docker-machine env streambacker-dev)โดยใช้หางเครื่องจักรและบอกเทียบท่าที่จะพูดคุยกับเครื่องที่มี

ณ จุดนี้ถ้าฉันไปที่เครื่องเทียบท่าและเรียกใช้df -hฉันจะได้รับ:

เครื่องเทียบท่า df -h

ถ้าฉันเรียกใช้docker-compose up -dฉันได้รับข้อผิดพลาด "ไม่เหลือพื้นที่บนอุปกรณ์"ขณะดาวน์โหลดคอนเทนเนอร์สุดท้าย

"tmpfs" ดูเหมือนจะเต็มแล้วหลังจากนั้น:

เครื่องเทียบท่า df -h

การตรวจสอบตัวเลือก--virtualbox-disk-sizeแสดงว่าค่าเริ่มต้นคือ 20000 MB ซึ่งฉันคิดว่าเป็นสิ่งที่เราเห็นเป็น "/ dev / sda1" ในทั้งสองภาพ เหตุใดคอนเทนเนอร์จึงเติม "tmpfs" n และ "tmpfs" คืออะไร? เป็นไดเร็กทอรีดาวน์โหลดชั่วคราวหรือไม่ ฉันจะสร้างพื้นที่เพิ่มขึ้นสำหรับคอนเทนเนอร์ของฉันได้อย่างไร

ขอบคุณ!

สำหรับข้อมูลผมใช้หางเครื่อง 0.4.0-RC2และหางเขียน 1.3.2


4
มีอะไรจะทำอย่างไรกับtmpfs --virtualbox-disk-sizeเป็นระบบไฟล์ (เช่นดิสก์ RAM) ที่ติดตั้งในหน่วยความจำและไม่มีสิ่งใดเข้าถึงดิสก์ของคุณ
0x7d7b

ขอบคุณ @ h3nrik สำหรับข้อมูลนั้น
Marc Perrin-Pelletier

2
ตรวจสอบสิ่งที่ห้อยอยู่ของนักเทียบท่าเช่นภาพห้อย, ไดรฟ์ข้อมูลห้อยและลบทิ้ง docker rmi $(docker images -f dangling=true -q)และdocker volume rm $(docker volume ls -f dangling=true -q)
Jinna Balu

คำตอบ:


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
Ray Pendergraph

แก้ไขปัญหาให้ฉันด้วยฉันไม่เข้าใจว่าอย่างไร แต่ขอบคุณ!
Bendihossan

มีวิธีใดในการเพิ่มขนาดเริ่มต้นเพื่อที่ฉันจะได้ไม่ต้องระบุด้วยตนเองทุกครั้ง?
CGFoX

124

ฉันมีข้อผิดพลาดเดียวกัน ( [ERROR] InnoDB: Error number 28 means 'No space left on device') และแก้ไขด้วยวิธีนี้:

1. ลบไดรฟ์ข้อมูลที่ไม่มีเจ้าของใน Docker คุณสามารถใช้คำสั่งโวลุ่มเทียบท่าในตัว คำสั่งในตัวยังลบไดเร็กทอรีใน / var / lib / docker / volume ที่ไม่ใช่ไดรฟ์ข้อมูลดังนั้นตรวจสอบให้แน่ใจว่าคุณไม่ได้ใส่อะไรลงไปในนั้นที่คุณต้องการบันทึก

คำเตือนโปรดใช้ความระมัดระวังเป็นอย่างยิ่งหากคุณมีข้อมูลที่ต้องการเก็บไว้

ทำความสะอาด:

$ 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นั่นเป็นเหตุผลที่ผมทำ
Matthias Braun

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ช่วยฉันด้วย
Maxim Yefremov

2
docker system pruneftw
Michael Guild

1
docker volume pruneสำหรับไดรฟ์ข้อมูลเท่านั้นระบบพรุนจะไม่ล้างไดรฟ์ข้อมูลห้อย
justin.m.chase

docker rmi $(docker images -q)เมื่อข้างต้นไม่ได้ล้างคุณมีพื้นที่เพียงพอที่นี่เป็นตัวเลือกนิวเคลียร์: เพิ่ม--forceหากคุณจำเป็นต้องใช้เมื่อข้ามเลเยอร์จำนวนมากที่รวมอยู่ในหลายคอนเทนเนอร์
EmptyArsenal

14

A. ลบภาพที่ไม่ได้ใช้

โดยใช้คำสั่ง docker rm หรือ docker rmi คุณสามารถลบภาพที่คุณไม่ต้องการได้ มีอิมเมจที่ช่วยในงานนี้ (มาร์ติน / นักเทียบท่า - ล้างข้อมูล - ไดรฟ์ข้อมูล) พื้นฐานคือการเริ่มต้น selectig จากรายการรูปภาพและคอนเทนเนอร์ของคุณ:

นักเทียบท่า ps -a -s

B. ปรับเปลี่ยน DOCKER JSON DESCRIPTOR

มีการกล่าวถึงในบางฟอรัม แนวคิดคือการเพิ่ม descriptor ที่อยู่ใน ~ / .docker / machine / Machines / default / config.json พารามิเตอร์น่าจะเป็น DiskSize แต่ฉันไม่รู้ว่ามันใช้งานได้ใน OS อื่นหรือไม่ (ไม่ใช่ใน windows)

ค. การปรับขนาดของลินุกซ์:

ใน Windows OS เครื่องเทียบท่าหรือ boot2docker เป็น virtualbox vm จากนั้นคุณสามารถทำตามขั้นตอนเพื่อปรับขนาดดิสก์ได้ ดูแลสำรองไฟล์ ขั้นตอนทั่วไปคือการปรับขนาดใน virtualbox จากนั้นใช้ประโยชน์ที่เรียกว่า gpartd เพื่อแก้ไขพื้นที่ที่ลินุกซ์รับรู้ในพาร์ติชัน มีลิงค์สำหรับทำตามขั้นตอนด้านล่างนี้:

D. สร้าง DOCKER-MACHINE / BOOT2DOCKER

แนวคิดคือสร้าง Docker-machine เริ่มต้นขึ้นใหม่ คำสั่งต่อไปนี้สามารถแสดงให้คุณเห็น โปรดทราบว่าในขณะที่คุณกำลังสร้าง boot2docker ใหม่คุณจะสูญเสียอิมเมจนักเทียบท่าที่ดาวน์โหลดมาก่อนหน้านี้

ค่าเริ่มต้น docker-machine rm

Docker-machine create --driver virtualbox --virtualbox-disk-size "100100" default

docker-machine env default

จากนั้นคุณสามารถไปที่ virtual box และดูพื้นที่ boot2docker ด้วยคำสั่ง "df -h"


ขอบคุณ ฉันกำลังทำงานบน Windows ฉันทำได้โดยการสร้างเครื่องเทียบท่าขึ้นใหม่
KinoP

ช่วย D: (สร้างเครื่องเทียบท่าใหม่)
StanislavL

ขอบคุณการสร้างเครื่องเทียบท่าใหม่ที่ใช้งานได้สำหรับฉัน (ฉันใช้ windows)
Lucha Laura Hardie

ฉันรู้สึกรักมาก!
eduyayo

2

บน docker osx / ฉันสามารถกดปุ่ม [ Move Disk Image ] และย้าย Docker.qcow2 ได้สำเร็จ (น่าจะมีคอนเทนเนอร์ / อิมเมจ)

ใส่คำอธิบายภาพที่นี่ เริ่มแรก - เมื่อเครื่องเริ่มทำงาน - ฉันยังไม่ได้รับ พื้นที่ว่างบนข้อผิดพลาดของอุปกรณ์ แต่ได้รับการแก้ไขไม่นานหลังจากนั้น


0

ฉันพบปัญหานี้และไม่สามารถเพิ่มพื้นที่เพิ่มเติมด้วย Docker UI สำหรับ mac ฉันติดตั้งนักเทียบท่าด้วย homebrew และรันคำสั่งต่อไปนี้เมื่อสร้างเครื่องของฉัน:

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

สิ่งนี้จะเพิ่มพื้นที่สำหรับหน่วยความจำและขนาดดิสก์เป็นสองเท่าให้กับ virtualbox ที่ฉันมีก่อนหน้านี้และคุณสามารถเพิ่มขนาดการตั้งค่าที่คุณต้องการได้ตามที่เห็นสมควร

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.