Docker saqlash migratsiyasi muammosi tarixi (docker ildizi)

Bir necha kun oldin, serverlardan birida docker xotirasini (docker barcha konteyner va tasvir fayllarini saqlaydigan katalog) alohida bo'limga ko'chirishga qaror qilindi.
ko'proq imkoniyatlarga ega edi. Vazifa ahamiyatsiz bo'lib tuyuldi va muammoni oldindan aytib bermadi ...

Keling, davom etamiz:

1. Ilovamizning barcha konteynerlarini to'xtating va o'ldiring:

docker-compose down

Agar idishlar ko'p bo'lsa va ular turli xil tarkibda bo'lsa, buni qilishingiz mumkin:

docker rm -f $(docker ps -q)

2. Docker demonini to'xtating:

systemctl stop docker

3. Katalogni kerakli joyga ko'chiring:

cp -r /var/lib/docker /docker/data/storage

4. Docker demoniga yangi katalogga qarashni aytamiz. Bir nechta variant mavjud: demonni yangi yo'lga ko'rsatish uchun -g bayrog'idan foydalaning yoki biz foydalangan tizim konfiguratsiyasi. Yoki symlink. Men bu haqda juda ko'p ma'lumot bermayman, bu Internetda. to'la docker ildizini yangi joyga ko'chirish bo'yicha qo'llanmalar.

5. Docker demonini ishga tushiring va uning to'g'ri joyda ko'rinishiga ishonch hosil qiling:

systemctl status docker

Chiqish satrlaridan birida biz quyidagilarni ko'rishimiz kerak:

├─19493 /usr/bin/dockerd --data-root=/docker/data/storage

Variant demonga o'tganiga ishonch hosil qildik, endi uni qo'llaganligini tekshirib ko'raylik (rahmat). inkvizitor68sl)!

docker info | awk '/Root Dir/ {print $NF}' 

6. Ilovamizni boshlaylik:

docker-compose up -d

7. Tekshirish

Va bu erda qiziqarli boshlanadi, DBMS, MQ, hamma narsa yaxshi! Ma'lumotlar bazasi buzilmagan, hammasi ishlaydi... nginxdan tashqari. Bizda Kerberos va kurtizanlar bilan o'z nginx tuzilmasi mavjud. Va konteyner jurnallarini ko'rish /var/tmp ga yoza olmasligini ko'rsatdi - Ruxsat rad etildi. Men chakkalarimni barmoqlarim bilan yoğrayman va vaziyatni tahlil qilishga harakat qilaman ... Qanday qilib bu mumkin? Docker tasviri o'zgarmadi. Biz shunchaki katalogni ko'chirdik. U har doim ishlagan va bu siz uchun ... Tajriba uchun men qo'llarim bilan konteynerga kirdim va ushbu katalogga huquqlarni o'zgartirdim, bor edi ildiz, ildiz 755, berdi ildiz, ildiz 777. Va hamma narsa boshlandi... Miyamda bir fikr jaranglay boshladi - qandaydir bema'nilik ... Men o'yladim, mayli, men nimanidir hisobga olmadim ...

O'tkazish paytida fayllarga kirish huquqlarini yaxshi ko'rishga qaror qildim. Biz ilovani, docker demonini to'xtatdik, yangi katalogni o'chirib tashladik va /var/lib/docker katalogidan nusxa oldik. rsync -a.

Menimcha, hozir hammasi yaxshi, keling Docker ilovasini ko'taraylik.

Aaand... muammo qoldi... Ko‘zim pirpirdi. Men o'zimning virtual mashinamning konsoliga yugurdim, u erda turli xil testlarni o'tkazaman, menda bu nginx tasviri bor edi va men konteyner ichiga ko'tarildim va bu erda /var/tmp katalogining huquqlari root, root 777. Ya'ni, xuddi qo'lda o'rnatishim kerak edi. Ammo tasvirlar bir xil!

Xfs fayl tizimi hamma joyda ishlatilgan.

Men buyruq yordamida solishtirdim

docker inspect my-nginx:12345

Barcha xeshlar bir xil, barchasi bittaga. Serverda ham, virtual mashinamda ham. Men mahalliy nginx tasvirini o'chirib tashladim va uni bir necha sabablarga ko'ra bir xil mashinada bo'lgan registrdan yana tortib oldim. Muammo esa o‘sha-o‘sha... Hozir ikkinchi ko‘zim tir-tir tirnaydi.

"AAAAAAAAA" deb baqirishdan va boshqa narsalardan tashqari, boshimda qanday fikrlar borligini endi eslay olmayman. Ertalab soat 4 da va Docker manba kodi tasvir qatlamlarini xeshlash tamoyilini tushunish uchun ishlatilgan. Energetik ichimlikning uchinchi qutisi ochildi. Oxir-oqibat, xeshlash faqat faylni, uning mazmunini hisobga olishini tushundim, lekin HUQUQLARGA KIRISH EMAS! Ya'ni, qandaydir sirli tarzda bizning huquqlarimiz yo'qolgan, selinux o'chirilgan, acl ishlatilmaydi va yopishqoq bit yo'q.

Men mahalliy tasvirni o'chirib tashladim, shuningdek, tasvirni docker registridan o'chirib tashladim va uni yana itardim. Va hamma narsa ishladi. Ma'lum bo'lishicha, o'tkazish vaqtida huquqlar mahalliy tasvir ichida ham, reestrda yotgan tasvirning ichida ham yo'qolgan. Yuqorida aytganimdek, bir qator sabablarga ko'ra u xuddi shu mashinada joylashgan edi. Natijada, bitta katalogda /var/lib/docker.

Va ular dokerning nigohini eski katalogga qaytarishga harakat qildilarmi, degan savolni kutish - yo'q, ular harakat qilishmadi, afsuski, sharoit bunga imkon bermadi. Ha, va men buni tushunishni juda xohlardim.

Ushbu maqolani yozganimdan so'ng, muammoning echimi menga ravshan bo'lib tuyuldi, ammo tahlil paytida u unchalik ko'rinmadi. Rostini aytsam, men Google'da qidirdim va shunga o'xshash vaziyatlarni topa olmadim.

Natija: Men muammoni hal qildim, sababini hali ham tushunmayapman =(

Agar kimdir bu muammoning mumkin bo'lgan sabablari haqida bilsa, taxmin qilsa, men buni sharhlarda eshitishdan juda xursand bo'laman!

Manba: www.habr.com

a Izoh qo'shish