Dalam proses menggunakan Docker, kadangkala kita perlu berkongsi imej dan bekas Docker antara mesin yang berbeza. Cara mudah ialah membungkus imej dan bekas ini ke dalam fail tar, kemudian memindahkannya ke mesin sasaran melalui rangkaian, dan kemudian nyahmampat dan memuatkannya ke dalam Docker. Walau bagaimanapun, walaupun kami berjaya memindahkan imej dan bekas ini ke mesin sasaran, kami sering menghadapi masalah seperti itu: tidak dapat memuatkan imej atau memulakan bekas, mendorong "tiada ruang tersisa pada peranti", iaitu, ruang cakera partition adalah tidak mencukupi, terutamanya apabila Masalah ini lebih berkemungkinan dihadapi apabila menggunakan tindanan pemacu storan2.
Apa yang sedang berlaku? Saya pernah menghadapi masalah yang sama Selepas beberapa penyiasatan dan penyelidikan, saya menemui sebab dan penyelesaian:
Pemacu storan Docker termasuk AUFS, DeviceMapper dan OverlayFS, antaranya Apa yang berlaku apabila docker gagal berkongsi cakera keras? adalah yang lebih popular. Ia berdasarkan sistem fail overlayFS, menindih berbilang sistem fail bercermin bersama-sama untuk membentuk titik lekap bersama, menjadikannya kelihatan seperti sistem fail yang lengkap, seperti yang ditunjukkan dalam rajah berikut:
Seperti yang ditunjukkan dalam rajah, bahagian biru ialah sistem fail bagi imej asas, bahagian hijau ialah sistem fail lapisan bekas, dan bahagian merah ialah sistem fail bagi lapisan baca sahaja. Lapisan baca sahaja mengandungi sistem fail biasa untuk semua imej Lapisan bekas ialah sistem fail setiap bekas Ia mencipta lapisan baca sahaja untuk setiap bekas dan menambah lapisan boleh tulis di atasnya supaya setiap bekas boleh melihat. Ia adalah sistem fail bebas dan tidak mengganggu antara satu sama lain.
Apabila kami mencipta bekas Docker, pemacu storan Apa yang berlaku apabila docker gagal berkongsi cakera keras? akan dibuat untuk setiap bekas dalam /var/lib/docker/ direktori Apa yang berlaku apabila docker gagal berkongsi cakera keras? Subdirektori berasingan untuk sistem fail bekas. Data fail dalam subdirektori ini semuanya disimpan dalam imej asas, jadi saiznya tidak menjejaskan prestasi pemacu storan. Walau bagaimanapun, apabila kami membungkus imej dan bekas Docker dari satu mesin dan menghantarnya ke mesin lain, apabila pemacu storan Apa yang berlaku apabila docker gagal berkongsi cakera keras? membongkar data, ia menyahmampatkannya ke direktori /var/lib/docker, menghasilkan direktori ini Ruang fail yang diduduki terlalu besar, dan ruang cakera partition di mana /var/lib/docker terletak juga menjadi lebih kecil dengan sewajarnya Rajah berikut mengambil direktori /var/lib/docker sebagai contoh untuk menggambarkan masalah ini:
Dalam gambar ini, saiz cakera partition /dev/vda1 ialah 50GB dan saiz cakera partition /var/lib/docker ialah 21GB Namun, kerana docker mencipta terlalu banyak bekas, /var / Terdapat ruang yang tidak mencukupi dalam direktori lib/docker, hanya 30.72MB yang tinggal Oleh itu, apabila kita ingin memulakan bekas dari mesin sedemikian dengan kekurangan ruang cakera, akan ada masalah kegagalan permulaan.
3.1 Kembangkan ruang cakera sekatan
Ini adalah kaedah yang paling biasa untuk mesin maya, kami Anda boleh mengembangkan saiz partition cakera dalam alat pengurusan mesin maya dan mulakan semula mesin maya. Untuk pelayan awan, kebanyakan platform awan menyediakan fungsi pengembangan cakera dalam talian, tetapi proses pengendaliannya agak rumit dan memerlukan berhati-hati untuk mengelakkan kehilangan data.
3.2 Lekapkan direktori /var/lib/docker pada cakera data yang lebih besar
Sediakan cakera yang lebih besar daripada 21GB (seperti 20T) terlebih dahulu dan formatkannya ke dalam format ext4 dan lekapkannya pada direktori /data, dan kemudian pindahkan direktori /var/lib/docker ke cakera data untuk penyimpanan. Arahan operasi khusus adalah seperti berikut:
# 制作文件系统格式 mkfs.ext4 /dev/vdb # 挂载 mount /dev/vdb /data # 备份原/var/lib/docker目录下所有数据 cp -au /var/lib/docker/* /data/ # 卸载/var/lib/docker目录 umount /var/lib/docker # 将/var/lib/docker目录迁移到新的数据盘中 echo '/dev/vdb /var/lib/docker ext4 defaults 0 0' >> /etc/fstab mount -a
3.3 Padamkan imej dan bekas Docker yang tidak lagi digunakan
Kami boleh menggunakan arahan berikut untuk membersihkan ruang cakera:
# 清理所有停止的容器 docker container prune # 清理所有未被标记的镜像 docker image prune -a # 删除所有没有容器使用的镜像 docker image prune -a --filter "dangling=true"
Ringkasan
Apabila menggunakan Docker, kita perlu sentiasa memberi perhatian sama ada ruang yang digunakan oleh pemacu storan mencukupi, jika tidak, ia boleh menyebabkan kegagalan permulaan. Untuk melakukan ini, anda boleh mengambil salah satu daripada tiga penyelesaian di atas Saya secara peribadi mengesyorkan kaedah kedua, yang boleh menyelesaikan masalah dengan cepat tanpa memusnahkan sistem fail asal. Semoga perkongsian saya dapat membantu anda, terima kasih kerana membaca.
Atas ialah kandungan terperinci Apa yang berlaku apabila docker gagal berkongsi cakera keras?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!