Mesin Docker: Tidak ada ruang tersisa di perangkat

126

Saya mencoba menyiapkan Mesin Docker dengan Docker Compose.

Skenario 1 (tanpa Mesin Docker)
Jika saya berjalan docker-compose up -dtanpa Mesin Docker, ini membuat 3 wadah tertaut saya seperti yang diinginkan (nginx + mongodb + nodejs).

Skenario 2 (dengan Mesin Docker)
Lalu saya membuat VM menggunakan Mesin Docker dan memberi tahu Docker untuk berbicara dengan mesin itu denganeval $(docker-machine env streambacker-dev) .

Pada titik ini, jika saya ssh ke mesin buruh pelabuhan saya dan menjalankan df -h, saya mendapatkan:

mesin buruh pelabuhan df -h

Jika saya kemudian menjalankan docker-compose up -d, saya mendapatkan pesan kesalahan "tidak ada ruang tersisa di perangkat" saat mengunduh penampung terakhir.

"tmpfs" sepertinya memang sedikit penuh setelah itu:

mesin buruh pelabuhan df -h

Memeriksa opsi --virtualbox-disk-size menunjukkan bahwa defaultnya adalah 20000 MB, yang menurut saya adalah apa yang dapat kita lihat sebagai "/ dev / sda1" pada kedua gambar. Jadi mengapa kontainer mengisi "tmpfs" n dan apa sebenarnya "tmpfs"? Apakah itu direktori unduhan sementara? Bagaimana cara membuat lebih banyak ruang untuk penampung saya?

Terima kasih!

Untuk informasi, saya menggunakan Docker Machine 0.4.0-rc2 dan Docker Compose 1.3.2 .

Marc Perrin-Pelletier
sumber
4
Tidak tmpfsada hubungannya dengan --virtualbox-disk-size. Ini adalah sistem file (seperti RAM disk) yang dipasang di memori dan tidak ada yang mengakses disk Anda.
0x7d7b
Terima kasih @ h3nrik untuk informasi itu.
Marc Perrin-Pelletier
2
periksa hal-hal yang menjuntai dari buruh pelabuhan, seperti gambar yang menjuntai, volume yang menjuntai, dan hapuslah. docker rmi $(docker images -f dangling=true -q)dandocker volume rm $(docker volume ls -f dangling=true -q)
Jinna Balu

Jawaban:

87

Seperti dikatakan di atas, tmpfstidak ada hubungannya dengan --virtualbox-disk-size. Sepertinya boot2docker terpasang tmpfske memori, jadi Anda perlu mendedikasikan lebih banyak memori ke vm virtualbox Anda. Anda dapat melakukannya dengan menentukan --virtualbox-memoryparameter.

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

Default:

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

Dengan --virtualbox-memoryset ke8096

$ 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% /
wtekiela.dll
sumber
14
Tidak terlalu intuitif, tetapi ini berhasil. Apa-apaan ini, Docker?
BastiBen
1
Memang tidak intuitif! Namun, ini tampaknya menjadi masalah dengan ini dan memperbaikinya untuk saya. Jadi, +1.
Ray Pendergraph
Memperbaiki masalah untuk saya juga, saya tidak mengerti bagaimana tapi, terima kasih!
Bendihossan
Adakah cara untuk meningkatkan ukuran default sehingga saya tidak perlu menentukannya secara manual setiap saat?
CGFoX
124

Saya mengalami kesalahan yang sama ([ERROR] InnoDB: Error number 28 means 'No space left on device' ) dan menyelesaikannya dengan cara ini:

1. Hapus volume yatim piatu di Docker, Anda dapat menggunakan perintah volume buruh pelabuhan bawaan. Perintah bawaan juga menghapus direktori apa pun di / var / lib / docker / volumes yang bukan volume jadi pastikan Anda tidak meletakkan apa pun di sana yang ingin Anda simpan.

Peringatan berhati-hatilah dengan ini jika Anda memiliki beberapa data yang ingin Anda simpan

Membersihkan:

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

Perintah tambahan:

Daftar volume yang menggantung:

$ docker volume ls -qf dangling=true

Buat daftar semua volume:

$ docker volume ls

2. Pertimbangkan juga untuk menghapus semua Gambar yang tidak digunakan.

Pertama-tama, singkirkan <none>gambar (yang terkadang dihasilkan saat membuat gambar dan jika karena alasan apa pun pembuatan gambar terputus, gambar tersebut tetap di sana).

inilah skrip bagus yang saya gunakan untuk menghapusnya

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

Kemudian jika Anda menggunakan Docker Compose untuk membuat Gambar secara lokal untuk setiap proyek. Anda akan mendapatkan banyak gambar yang biasanya dinamai seperti folder Anda (contoh jika folder proyek Anda bernama Halo, Anda akan menemukan nama gambarHello_blablabla ). jadi pertimbangkan juga untuk menghapus semua gambar ini

Anda dapat mengedit skrip di atas untuk menghapusnya atau menghapusnya secara manual dengan

docker rmi {image-name}

Mahmoud Zalt
sumber
3
Pada Mac saya harus menggunakan tanda kutip tunggal ( ') sekitar nilai-nilai argumen: docker rmi $(docker images | grep '^<none>' | awk '{print $3}'). Menghapus kontainer yang dihentikan dapat dilakukan dengan docker rm $(docker ps -qa --no-trunc --filter "status=exited")seperti yang dijelaskan di sini: stackoverflow.com/a/32723127/619659 .
Webdevotion
1
Saya memiliki begitu banyak gambar yang tidak digunakan, saya mencapai batas karakter shell saya. Itulah mengapa saya melakukannya docker images | grep "^<none>" | xargs docker rmi.
Matthias Braun
1
Menghapus gambar yang tidak dibutuhkan membantu saya.
akauppi
docker volume prune
justin.m. mengejar
.. lihat penjelasan langkah demi langkah saya untuk mengubah ukuran / var / lib / buruh pelabuhan menggunakan resize2fs di utas lain: stackoverflow.com/questions/32485723/…
Alex
66

Jika Anda menggunakan Docker Community Edition:

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

Jika Anda menggunakan boot2docker (docker-machine) hapus volume yang tidak aktif:

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

Hapus gambar yang tidak digunakan:

 docker rmi $(docker images -q -f "dangling=true")
Alex Efimov
sumber
6
docker system prunemembantu saya
Maxim Yefremov
2
docker system pruneftw
Michael Guild
1
docker volume pruneuntuk volume saja, pemangkasan sistem tidak akan menghapus volume yang menggantung.
justin.m. mengejar
Ketika di atas tidak jelas Anda cukup ruang, inilah opsi nuklir: docker rmi $(docker images -q). Tambahkan --forcejika Anda harus ketika melewatkan sekelompok lapisan yang termasuk dalam beberapa wadah.
EmptyArsenal
14

A. HAPUS GAMBAR YANG TIDAK DIGUNAKAN

menggunakan perintah docker rm atau docker rmi Anda dapat menghapus gambar yang tidak Anda butuhkan. Sebenarnya ada gambar yang membantu dalam tugas ini (martin / docker-cleanup-volume). Dasarnya adalah memulai selectig dari gambar dan daftar container Anda:

buruh pelabuhan ps -a -s

B. MODIFIKASI DESKRIPSI JSON DOCKER

itu disebutkan di beberapa forum. Idenya adalah untuk menambah deskriptor yang terletak di ~ / .docker / machine / machines / default / config.json. Parameter tampaknya DiskSize tetapi saya tidak tahu apakah itu berfungsi di OS lain (bukan di windows).

C.Ukuran LINUX:

di OS Windows, mesin galangan atau boot2docker sebenarnya adalah virtualbox vm, maka Anda dapat mengikuti prosedur untuk mengubah ukuran disk. Berhati-hatilah saat membuat cadangan file. Prosedur umum adalah membuat perubahan ukuran di virtualbox dan kemudian menggunakan utilitas yang disebut gpartd untuk mengubah ruang yang dirasakan oleh linux di partisi-nya. Ada beberapa tautan untuk melakukan prosedur ini yang dirujuk di bawah ini:

D. MEREKREASI MESIN DOKTER / BOOT2DOCKER

Idenya adalah membuat ulang mesin buruh pelabuhan default. Perintah berikut dapat menggambarkan Anda. Perhatikan bahwa saat Anda membuat ulang boot2docker, Anda akan kehilangan gambar docker yang diunduh sebelumnya.

buruh pelabuhan-mesin rm default

docker-machine membuat --driver virtualbox --virtualbox-disk-size "100100" default

buruh pelabuhan-mesin default env

lalu Anda dapat pergi ke kotak virtual dan melihat ruang boot2docker dengan perintah "df -h"

andhdo
sumber
Terima kasih. Saya bekerja di Windows. Saya membuatnya dengan membuat ulang mesin buruh pelabuhan.
KinoP
Membantu D: (membuat ulang mesin buruh pelabuhan)
StanislavL
Terima kasih, membuat ulang mesin buruh pelabuhan bekerja untuk saya (saya di windows)
Lucha Laura Hardie
Saya merasakan begitu banyak cinta!
eduyayo
2

Pada docker osx / saya bisa menekan tombol [ Move Disk Image ] dan itu berhasil memindahkan Docker.qcow2 (mungkin berisi kontainer / gambar)

masukkan deskripsi gambar di sini awalnya - ketika mesin dimulai - saya masih mendapatkan Tidak ada ruang tersisa pada kesalahan perangkat tetapi segera teratasi setelah itu.

johndpope
sumber
0

Saya mengalami masalah ini dan tidak dapat menambahkan ruang tambahan dengan UI buruh pelabuhan untuk mac, saya menginstal buruh pelabuhan dengan homebrew dan menjalankan perintah berikut saat membuat mesin saya:

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

ini menambahkan dua kali lipat ruang untuk memori dan ukuran disk ke kotak virtual yang saya miliki sebelumnya dan Anda dapat menambahkan ukuran pengaturan di sini yang Anda butuhkan sesuai keinginan Anda

aabiro
sumber