Docker Makinesi: Cihazda yer kalmadı


126

Docker Machine'i Docker Compose ile kurmaya çalışıyorum.

Senaryo 1 (Docker Makinesi olmadan) Docker Machine olmadan
çalıştırırsam docker-compose up -d, amaçlandığı şekilde 3 bağlantılı konteynerimi oluşturur (nginx + mongodb + nodejs).

Senaryo 2 (Docker Machine ile)
Ardından Docker Machine kullanarak bir VM oluşturup Docker'a o makineyle konuşmasını söylüyorum eval $(docker-machine env streambacker-dev).

Bu noktada, docker makineme ssh gönderir ve çalıştırırsam df -h, şunu elde ederim:

docker makinesi df -h

Daha sonra çalıştırırsam docker-compose up -d, son kapsayıcıyı indirirken "cihazda yer kalmadı" hatası alıyorum .

"tmpfs" bundan sonra gerçekten biraz dolu görünüyor:

docker makinesi df -h

Denetleme --virtualbox-disk boyutu seçenek gösterecek ikimiz de resimler üzerinde "/ dev / sda1" olarak görebilirsiniz ne düşünüyorsunuz 20000 MB varsayılan olarak, o. Öyleyse kaplar neden "tmpfs" n'yi dolduruyor ve "tmpfs" tam olarak nedir? Geçici bir indirme dizini mi? Kaplarım için nasıl daha fazla alan yaratabilirim?

Teşekkürler!

Bilgi için Docker Machine 0.4.0-rc2 ve Docker Compose 1.3.2 kullanıyorum .


4
tmpfsİle ilgisi yoktur --virtualbox-disk-size. Belleğe takılı bir dosya sistemidir (RAM diski gibi) ve diskinize erişen hiçbir şey yoktur.
0x7d7b

Bu bilgi için @ h3nrik teşekkürler.
Marc Perrin-Pelletier

2
Docker'ın sarkan görüntüler, sarkan hacimler gibi sarkan şeylerini kontrol edin ve silin. docker rmi $(docker images -f dangling=true -q)vedocker volume rm $(docker volume ls -f dangling=true -q)
Jinna Balu

Yanıtlar:


87

Yukarıda belirtildiği gibi, tmpfsbununla hiçbir ilgisi yoktur --virtualbox-disk-size. Boot2docker tmpfsbelleğe bağlanıyor gibi görünüyor , bu yüzden virtualbox sanal kutunuza daha fazla bellek ayırmanız gerekiyor. --virtualbox-memoryParametreyi belirterek bunu yapabilirsiniz .

   --virtualbox-memory "1024"
Size of memory for host in MB [$VIRTUALBOX_MEMORY_SIZE]

Varsayılan:

$ 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% /

Olarak --virtualbox-memoryayarlandı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
Çok sezgisel değil ama bu işe yaradı. Ne oluyor Docker?
BastiBen

1
Aslında sezgisel değil! Ancak, bununla ilgili sorun bu gibi görünüyor ve benim için düzeltildi. Yani +1.
Ray Pendergraph

Benim için de sorunu çözdü, nasıl olduğunu anlamıyorum ama teşekkürler!
Bendihossan

Her seferinde manuel olarak belirtmek zorunda kalmamam için varsayılan boyutu artırmanın bir yolu var mı?
CGFoX

124

Aynı hatayı ( [ERROR] InnoDB: Error number 28 means 'No space left on device') aldım ve şu şekilde çözdüm:

1. Docker'da artık birimleri silin, yerleşik docker volume komutunu kullanabilirsiniz. Yerleşik komut, birim olmayan / var / lib / docker / volumes içindeki herhangi bir dizini de siler, bu nedenle oraya kaydetmek istediğiniz hiçbir şey koymadığınızdan emin olun.

Saklamak istediğiniz bazı verileriniz varsa, bu konuda çok dikkatli olun.

Temizlemek:

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

Ek komutlar:

Sarkan hacimleri listeleyin:

$ docker volume ls -qf dangling=true

Tüm ciltleri listeleyin:

$ docker volume ls

2. Ayrıca kullanılmayan tüm Görüntüleri kaldırmayı da düşünün.

Önce <none>görüntülerden kurtulun (bunlar bazen bir görüntü oluştururken oluşturulur ve herhangi bir nedenle görüntü oluşturma kesintiye uğrarsa, orada kalırlar).

işte onları kaldırmak için kullandığım güzel bir komut dosyası

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

Ardından, her proje için yerel olarak Görüntüler oluşturmak için Docker Compose kullanıyorsanız. Sonunda genellikle klasörünüz gibi adlandırılan birçok resimle karşılaşacaksınız (örneğin, Hello adlı proje klasörünüz varsa, resimlerin adını bulacaksınız Hello_blablabla). bu yüzden tüm bu resimleri kaldırmayı da düşünün

bunları kaldırmak için yukarıdaki komut dosyasını düzenleyebilir veya manuel olarak kaldırabilirsiniz.

docker rmi {image-name}


3
Mac'te ben argüman değerleri tek tırnak ( ') kullanmak zorunda kaldı: docker rmi $(docker images | grep '^<none>' | awk '{print $3}'). Durdurulan konteynerlerin çıkarılması docker rm $(docker ps -qa --no-trunc --filter "status=exited")burada açıklandığı gibi yapılabilir : stackoverflow.com/a/32723127/619659 .
Webdevotion

1
Kullanılmayan çok sayıda resmim vardı, kabuğumun karakter sınırına ulaştım. Bu yüzden yaptım docker images | grep "^<none>" | xargs docker rmi.
Matthias Braun

1
Gereksiz görüntüleri kaldırmak bana yardımcı oldu.
akauppi

docker volume prune
justin.m.chase

.. başka bir iş parçacığında resize2fs kullanarak / var / lib / docker'ı yeniden boyutlandırmak için adım adım açıklamama bakın : stackoverflow.com/questions/32485723/…
Alex

66

Docker Community Edition kullanıyorsanız:

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

Boot2docker (docker-machine) kullanıyorsanız, öksüz kalan birimleri temizleyin:

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

Kullanılmayan resimleri temizleyin:

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

6
docker system prunebana yardım etti
Maxim Yefremov

2
docker system pruneftw
Michael Guild

1
docker volume prunesadece hacimler için, sistem budama sarkan hacimleri temizlemeyecektir.
justin.m.chase

Yukarıdaki bilgilerin yeterli alan kurtulamadığında, burada nükleer seçenek: docker rmi $(docker images -q). --forceBirden çok kapta bulunan bir grup katmanı atlamanız gerekiyorsa ekleyin .
EmptyArsenal

14

A. KULLANILMAYAN GÖRÜNTÜLERİ KALDIRIN

docker rm veya docker rmi komutlarını kullanarak ihtiyacınız olmayan görüntüleri kaldırabilirsiniz. Aslında bu göreve yardımcı olan bir imaj var (martin / docker-cleanup-volumes). Temel, resimlerinizden ve kapsayıcı listenizden seçim yapmaya başlamaktır:

docker ps -a -s

B. DOCKER JSON DESCRIPTOR'I DEĞİŞTİRİN

bazı forumlarda bahsedilmektedir. Buradaki fikir ~ / .docker / machine / machines / default / config.json içinde bulunan tanımlayıcıyı arttırmaktır. Parametre DiskSize gibi görünüyor, ancak diğer işletim sistemlerinde çalışıp çalışmadığını bilmiyorum (Windows'ta değil).

C. LINUX YENİDEN BOYUTLANDIRMA:

Windows işletim sisteminde, docker makinesi veya boot2docker aslında bir virtualbox vm'dir, daha sonra diski yeniden boyutlandırmak için prosedürü takip edebilirsiniz. Dosyaları yedeklemeye özen gösterin. Genel prosedür, sanal kutuda yeniden boyutlandırma yapmak ve daha sonra, bölümlerinde linux tarafından algılanan alanı değiştirmek için gpartd adlı bir faydayı kullanmaktır. Bu prosedürü gerçekleştirmek için aşağıda referans verilen bazı bağlantılar vardır:

D. DOCKER-MACHINE / BOOT2DOCKER'I YENİDEN OLUŞTURUN

Fikir, varsayılan docker makinesini yeniden oluşturmaktır. Aşağıdaki komutlar size örnek olabilir. Boot2docker'ı yeniden oluştururken, önceki indirilen docker görüntülerini kaybedeceğinizi unutmayın.

docker-machine rm varsayılanı

docker-machine create --driver virtualbox --virtualbox-disk-size "100100" varsayılan

docker-machine env default

daha sonra sanal kutuya gidebilir ve "df -h" komutuyla boot2docker alanını görebilirsiniz


Teşekkürler. Windows üzerinde çalışıyordum. Liman makinesini yeniden yaratarak başardım.
KinoP

D'ye yardım etti: (liman makinesini yeniden oluşturuyor)
StanislavL

Teşekkürler, liman makinesini yeniden yaratmak benim için çalıştı (pencerelerdeyim)
Lucha Laura Hardie

Çok fazla sevgi hissediyorum!
eduyayo

2

Docker osx / üzerinde bir düğmeye [ Disk Görüntüsünü Taşı ] basabildim ve Docker.qcow2'yi (muhtemelen kapsayıcıları / görüntüleri içeren) başarıyla taşıdı

görüntü açıklamasını buraya girin Başlangıçta - makineler başladığında - hala cihazda yer yok hatası alıyordum, ancak kısa süre sonra çözüldü.


0

Bu sorunla karşılaştım ve mac için docker UI ile ek alan ekleyemedim, docker'ı homebrew ile kurdum ve makinemi oluştururken aşağıdaki komutu çalıştırdım:

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

bu, daha önce sahip olduğum sanal kutuya bellek ve disk boyutu için iki kat daha fazla alan ekler ve burada ihtiyacınız olan ayar boyutunu uygun gördüğünüz şekilde ekleyebilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.