Saya memasang buruh pelabuhan di mesin Debian 7 dengan cara berikut
$ echo deb http://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list
$ sudo apt-get update
$ curl -sSL https://get.docker.com/ubuntu/ | sudo sh
Setelah itu ketika saya pertama kali mencoba membuat Gambar gagal dengan kesalahan berikut
time="2015-06-02T14:26:37-04:00" level=info msg="[8] System error: write /sys/fs/cgroup/docker/01f5670fbee1f6687f58f3a943b1e1bdaec2630197fa4da1b19cc3db7e3d3883/cgroup.procs: no space left on device"
Ini info tentang buruh pelabuhan
Containers: 2
Images: 21
Storage Driver: aufs
Root Dir: /var/lib/docker/aufs
Backing Filesystem: extfs
Dirs: 25
Dirperm1 Supported: true
Execution Driver: native-0.2
Kernel Version: 3.16.0-0.bpo.4-amd64
Operating System: Debian GNU/Linux 7 (wheezy)
CPUs: 2
Total Memory: 15.7 GiB
WARNING: No memory limit support
WARNING: No swap limit support
Bagaimana saya bisa menambah memori? Di mana konfigurasi sistem disimpan?
Dari saran Kal:
Ketika saya menyingkirkan semua gambar dan wadah itu membebaskan beberapa ruang dan membangun gambar berlari lebih lama sebelum gagal dengan kesalahan yang sama. Jadi pertanyaannya adalah, ruang mana yang dirujuk dan bagaimana cara mengkonfigurasinya?
df -ih
Jawaban:
Saya memiliki kesalahan yang sama dan menyelesaikannya dengan cara ini:
1. Hapus volume yatim di Docker, Anda dapat menggunakan perintah volume docker bawaan. Perintah bawaan juga menghapus direktori apa pun di / var / lib / docker / volume yang bukan volume jadi pastikan Anda tidak memasukkan apa pun di sana yang ingin Anda simpan.
Peringatan sangat berhati-hati dengan ini jika Anda memiliki beberapa data yang ingin Anda simpan
Membersihkan:
Perintah tambahan:
Daftar volume yang menggantung:
Daftar semua volume:
2. Juga pertimbangkan untuk menghapus semua Gambar yang tidak digunakan.
Pertama-tama singkirkan
<none>
gambar (itu kadang-kadang dihasilkan saat membangun gambar dan jika karena alasan apapun bangunan gambar terganggu, mereka tinggal di sana).inilah skrip bagus yang saya gunakan untuk menghapusnya
Kemudian jika Anda menggunakan Docker Compose untuk membuat Gambar secara lokal untuk setiap proyek. Anda akan berakhir dengan banyak gambar yang biasanya dinamai seperti folder Anda (misalnya jika folder proyek Anda bernama Halo, Anda akan menemukan nama gambar
Hello_blablabla
). jadi pertimbangkan juga untuk menghapus semua gambar iniAnda dapat mengedit skrip di atas untuk menghapusnya atau menghapusnya secara manual
docker rmi {image-name}
sumber
docker images -qf dangling=true
dan tentu saja menghapusnya dengandocker rmi $(docker images -qf dangling=true)
.UPDATE
Perintah-perintah di bawah ini telah menjadi hacks karena Docker menjadi lebih berkembang Praktik terbaik saat ini adalah
Ini akan menghapus:
Seperti di bawah ini, ini adalah nuklir.
Untuk membersihkan sistem Anda, lepas dulu wadah
lalu hapus gambar
Ini tentu saja nuklir dan akan menghapus semua wadah dan semua gambar. Anda dapat menghapusnya satu per satu melalui
docker rm #CONTAINER_ID#
dandocker rmi #IMAGE_ID
.sumber
df -ih
. Untuk mendiagnosis lebih banyak pembedahan, masukkanncdu
lalu tekan c untuk menghitung file dan C untuk mengurutkan berdasarkan jumlah file untuk mendapatkan perkiraan kasar tentang apa yang menggunakan semua inode Anda. Jika masalahnya memang buruh pelabuhan itu akan segera terlihat oleh direktori menggunakan inode terbanyak.docker system prune
Periksa apakah Anda memiliki ruang kosong di / var karena ini adalah tempat Docker menyimpan file gambar secara default (di / var / lib / docker).
Pertama-tama bersihkan barang-barang dengan menggunakan
docker ps -a
daftar semua wadah (termasuk yang berhenti) dandocker rm
untuk menghapusnya; lalu gunakandocker images
untuk mendaftar semua gambar yang telah Anda simpan dandocker rmi
untuk menghapusnya.Selanjutnya, ubah lokasi penyimpanan dengan opsi -g pada daemon buruh pelabuhan atau dengan mengedit
/etc/default/docker
dan menambahkan-g
opsi keDOCKER_OPTS
.-g
menentukan lokasi "Docker runtime" yang pada dasarnya adalah semua hal yang dibuat Docker saat Anda membuat gambar dan menjalankan wadah. Pilih lokasi dengan banyak ruang karena ruang disk yang digunakan cenderung tumbuh seiring waktu. Jika Anda mengedit/etc/default/docker
, Anda harus memulai ulang daemon buruh pelabuhan agar perubahan diterapkan.Sekarang Anda harus dapat membuat gambar baru (atau menariknya dari Docker Hub) dan Anda akan melihat banyak file yang dibuat di direktori yang Anda tentukan dengan opsi -g.
sumber
docker ps -a
untuk membuat daftar semua wadah (termasuk yang keluar) dan kemudiandocker rm
untuk menghapusnya. Gunakandocker images
untuk membuat daftar semua gambar dan kemudiandocker rmi
untuk menghapusnya. Semoga itu harus membersihkan semuanya (atau sebagian besar hal).Seperti yang sudah disebutkan,
membantu, tetapi dengan Docker 17.06.1 dan yang lebih baru tanpa memangkas volume yang tidak digunakan. Sejak Docker 17.06.1, perintah berikut memangkas volume juga:
Dari dokumentasi Docker: https://docs.docker.com/config/pruning/
Jika Anda ingin memangkas volume dan menyimpan gambar dan wadah:
sumber
docker volume prune
membantu saya hari ini ketika semua solusi lain di sini berhenti bekerja.Jika itu hanya instalasi uji Docker (yaitu bukan produksi) dan Anda tidak peduli melakukan pembersihan nuklir, Anda dapat:
bersihkan semua wadah:
docker ps -a | sed '1 d' | awk '{print $1}' | xargs -L1 docker rm
bersihkan semua gambar:
docker images -a | sed '1 d' | awk '{print $3}' | xargs -L1 docker rmi -f
Sekali lagi, saya menggunakan ini dalam contoh EC2 saya ketika mengembangkan Docker, bukan pada jalur QA atau Produksi yang serius. Yang hebat adalah jika Anda memiliki Dockerfile (s), mudah untuk membangun kembali dan atau
docker pull
.sumber
docker images -a | sed '1 d' | awk '{print $3}' | xargs docker rmi -f
. Versi OS X BSDxargs
mendukung-L
opsi, tidak seperti versi boot2docker.docker ps -a -q
dll untuk menghindari manipulasi teks, yaitudocker rm $(docker ps -a -q); docker rmi -f $(docker images -a -q)
harus melakukan trikuntuk menghapus semua wadah, volume, jaringan, dan gambar yang tidak digunakan sekaligus ( https://docs.docker.com/engine/reference/commandline/system_prune/#related-commands ):
jika tidak cukup, orang dapat menghapus wadah yang sedang berjalan terlebih dahulu:
meningkatkan / var / lib / docker atau menggunakan lokasi lain dengan lebih banyak ruang juga merupakan alternatif yang baik untuk menghilangkan kesalahan ini (lihat Bagaimana cara mengubah direktori instalasi gambar buruh pelabuhan? )
sumber
docker system prune
tidak menghapus volume.docker system prune -a -f --volumes
akan menghapus volume.Docker untuk Mac
Jadi
docker system prune
dandocker system prune --volumes
disarankan dalam jawaban lain membebaskan beberapa ruang setiap kali, tetapi akhirnya setiap kali saya menjalankan apa pun saya mendapatkan kesalahan.Apa yang sebenarnya memperbaiki masalah root adalah menghapus
Docker.raw
file yang digunakan Docker untuk Mac untuk penyimpanan, dan me-restart-nya.Untuk menemukan file itu buka Docker untuk Mac dan buka *
Pada versi yang lebih baru dari Docker untuk Mac **, ini menunjukkan kepada Anda ukuran sebenarnya dari file pada disk di UI, serta ukuran maksimum yang dialokasikan. Anda mungkin akan melihat bahwa itu sangat besar. Sebagai contoh pada mesin saya itu 41GB !
Saya menghapus
Docker.raw
, me-restart Docker untuk Mac, dan file secara otomatis dibuat lagi dan kembali menjadi 0GB .Semuanya terus berfungsi seperti sebelumnya , meskipun tentu saja saya telah kehilangan cache Docker saya. Seperti yang diharapkan, setelah menjalankan beberapa perintah Docker file mulai terisi lagi dengan beberapa GB barang, tetapi tidak ada yang mendekati 41GB.
Memperbarui
Beberapa bulan kemudian, saya
Docker.raw
mengisi kembali ke ukuran yang sama. Jadi metode ini berhasil, tetapi harus diulang setiap beberapa bulan. Bagi saya itu tidak masalah.Catatan mengapa ini bekerja - saya harus menganggap itu adalah bug di Docker untuk Mac. Sepertinya
docker system prune
/docker system prune --volumes
harus sepenuhnya menghapus konten file ini, tetapi tampaknya file mengakumulasi hal-hal lain yang tidak dapat dihapus oleh perintah-perintah ini. Pokoknya, menghapusnya secara manual memecahkan masalah!sumber
Docker meninggalkan gambar yang menggantung di sekitar yang dapat mengambil ruang Anda. Untuk membersihkan setelah Docker, jalankan yang berikut:
atau dengan versi Docker yang lebih lama:
Ini akan menghapus gambar yang keluar dan menggantung, yang diharapkan akan membersihkan ruang perangkat.
sumber
docker rmi $(docker images -f "dangling=true" -q)
sumber
Anda juga bisa menggunakan:
atau hanya untuk volume:
sumber
Dalam kasus saya, instalasi ubuntu-server 18.04.1 [untuk beberapa alasan aneh] menciptakan volume logis LVM dengan ukuran hanya 4GB bukannya 750GB. Karena itu ketika menarik gambar saya akan mendapatkan kesalahan "tidak ada ruang yang tersisa di perangkat" ini. Cara mengatasinya sederhana:
sumber
Saya juga mengalami masalah ini di mesin RHEL. Saya tidak menemukan solusi tepat di mana pun di komunitas stack-overflow dan docker-hub. Jika Anda menghadapi masalah ini bahkan setelah perintah di bawah ini:
sistem docker memangkas --semua
Solusi yang akhirnya berhasil:
sumber
Bersihkan Docker dengan menggunakan perintah berikut:
sumber
Grup cg Anda
cpuset
mengaktifkan pengontrolnya. Pengontrol ini sebagian besar berguna dalam lingkungan NUMA di mana ia memungkinkan untuk menentukan dengan tepat CPU / memori bank mana tugas Anda diizinkan untuk dijalankan.Secara default wajib
cpuset.mems
dancpuset.cpus
tidak disetel yang berarti bahwa "tidak ada ruang yang tersisa" untuk tugas Anda, karenanya kesalahan.Cara termudah untuk memperbaikinya adalah dengan mengaktifkan
cgroup.clone_children
1 di root cgroup. Dalam kasus Anda, seharusnya begituIni pada dasarnya akan menginstruksikan sistem untuk secara otomatis menginisialisasi wadah
cpuset.mems
dancpuset.cpus
dari cgroup induknya.sumber
echo 0 > /sys/fs/cgroup/cpuset/system.slice/cpuset.mems
Jika Anda menggunakan image boot2docker melalui Docker Toolkit, maka masalahnya berasal dari kenyataan bahwa mesin virtual boot2docker telah kehabisan ruang.
Ketika Anda melakukan
docker import
atau menambahkan gambar baru, gambar akan disalin ke/mnt/sda1
yang mungkin sudah penuh.Salah satu cara untuk memeriksa ruang yang tersedia di gambar, adalah dengan ssh ke dalam vm dan menjalankan
df -h
dan memeriksa ruang yang tersisa di / mnt / sda1Perintah ssh adalah
docker-machine ssh default
Setelah Anda yakin bahwa itu memang masalah ruang, Anda dapat membersihkan sesuai dengan instruksi di beberapa jawaban pada pertanyaan ini, atau Anda dapat memilih untuk mengubah ukuran gambar boot2docker itu sendiri, dengan menambah ruang pada
/mnt/sda1
Anda dapat mengikuti petunjuk di sini untuk mengubah ukuran gambar https://gist.github.com/joost/a7cfa7b741d9d39c1307
sumber
Jika Anda menggunakan Docker Desktop, Anda dapat meningkatkan ukuran gambar Disk di Pengaturan Lanjut dengan membuka Preferensi Docker .
Ini screenshot dari macOS:
sumber
Ini mungkin karena ruang penyimpanan default diatur ke 40GB (jalur default, / var / lib / docker)
Anda dapat mengubah volume penyimpanan untuk menunjuk ke jalur yang berbeda
DOCKER_STORAGE_OPTIONS = '- driver penyimpanan = overlay --graph = CUSTOM_PATH'
jika Anda menjalankan info docker perintah (harus menampilkan driver penyimpanan sebagai overlay)
sumber
Sepertinya ada beberapa cara ini bisa terjadi. Masalah yang saya miliki adalah bahwa image disk docker telah mencapai ukuran maksimumnya (Docker Whale -> Preferences -> Disk jika Anda ingin melihat ukuran apa yang ada di OSX).
Saya menaikkan batas dan dan baik untuk pergi. Saya yakin membersihkan gambar yang tidak digunakan akan bekerja juga.
sumber
Saya menjalankan perintah di bawah ini.
Tidak perlu membuat ulang gambar sesudahnya.
Ini menghapus wadah keluar / menggantung dan volume menggantung.
sumber
Bagi saya
docker system prune
melakukan trik. Saya menjalankan mac os.sumber
docker volume ls
tidak menghasilkan apa-apa, jadi sepertinya penyimpanan itu sebagian besar digunakan oleh cache dan menggantung gambar.Ini berhasil untuk saya
tampaknya menjadi opsi yang lebih baik dengan versi terbaru
sumber