Docker պահեստավորման միգրացիայի խնդրի պատմություն (docker root)

Ոչ ավելի, քան մի քանի օր առաջ սերվերներից մեկի վրա որոշվեց տեղափոխել docker պահեստը (գրացուցակը, որտեղ docker-ը պահում է բոլոր կոնտեյներները և պատկերային ֆայլերը) առանձին բաժին, որը
ավելի մեծ կարողություն ուներ. Առաջադրանքը չնչին էր թվում և անախորժություն չէր կանխատեսում...

Եկեք սկսենք:

1. Դադարեցրեք և սպանեք մեր հավելվածի բոլոր բեռնարկղերը.

docker-compose down

եթե կան շատ տարաներ և դրանք տարբեր կազմով են, կարող եք դա անել.

docker rm -f $(docker ps -q)

2. Դադարեցրեք docker daemon-ը.

systemctl stop docker

3. Տեղափոխեք գրացուցակը ցանկալի վայր.

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

4. Մենք ասում ենք docker daemon-ին փնտրել նոր գրացուցակում: Կան մի քանի տարբերակներ. կա՛մ օգտագործեք -g դրոշը՝ դեյմոնին նոր ուղի ցույց տալու համար, կա՛մ systemd կոնֆիգուրացիաներ, որոնք մենք օգտագործել ենք: Կամ սիմվոլիկ: Ես չեմ մանրամասնի այս մասին, այն ինտերնետում է: լի ձեռնարկներ docker root-ը նոր վայր տեղափոխելու վերաբերյալ:

5. Գործարկեք docker daemon-ը և համոզվեք, որ այն ճիշտ տեղում է.

systemctl status docker

Ելքային գծերից մեկում մենք պետք է տեսնենք.

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

Մենք համոզվեցինք, որ տարբերակը փոխանցվել է դեյմոնին, հիմա ստուգենք՝ արդյոք այն կիրառել է (շնորհակալություն inkvizitor68sl)!

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

6. Սկսենք մեր դիմումը.

docker-compose up -d

7. Ստուգեք

Եվ ահա զվարճանքը սկսվում է, DBMS, MQ, ամեն ինչ լավ է: Տվյալների բազան անփոփոխ է, ամեն ինչ աշխատում է... բացի nginx-ից։ Մենք ունենք մեր սեփական nginx build-ը Kerberos-ի և կուրտիզանների հետ: Եվ բեռնարկղերի տեղեկամատյանները դիտելը ցույց տվեց, որ այն չի կարող գրել /var/tmp - Թույլտվությունը մերժված է: Ես մատներով հունցում եմ քունքերս և փորձում վերլուծել իրավիճակը... Ինչպե՞ս է դա հնարավոր։ Docker պատկերը չի փոխվել: Մենք պարզապես տեղափոխեցինք գրացուցակը: Այն միշտ աշխատում էր, և ահա այն ձեզ համար... Փորձի համար ես ձեռքով մտա տարայի մեջ և փոխեցի այս գրացուցակի իրավունքները, կային. արմատ, արմատ 755, տվեց արմատ, արմատ 777. Եվ ամեն ինչ սկսվեց... Գլխումս սկսեց մի միտք հնչել՝ ինչ-որ անհեթեթություն... Մտածեցի՝ դե միգուցե ինչ-որ բան հաշվի չեմ առել...

Ես որոշեցի, որ փոխանցման ժամանակ մենք սիրահարվել ենք ֆայլերի մուտքի իրավունքներին։ Մենք դադարեցրինք հավելվածը՝ docker daemon-ը, ջնջեցինք նոր գրացուցակը և պատճենեցինք /var/lib/docker գրացուցակը՝ օգտագործելով rsync -a.

Կարծում եմ՝ հիմա ամեն ինչ լավ է, եկեք բարձրացնենք Docker հավելվածը։

Աաաանդ... խնդիրը մնաց... Աչքս կծկվեց։ Ես շտապեցի դեպի իմ վիրտուալ մեքենայի կոնսոլը, որտեղ տարբեր թեստեր եմ անցկացնում, ունեի այս nginx պատկերը և բարձրացա կոնտեյների ներսում, և այստեղ /var/tmp գրացուցակի իրավունքներն են՝ root, root 777: Այսինքն՝ նույնը, ինչ ես պետք է ձեռքով սահմանեի: Բայց պատկերները նույնական են։

Ամենուր օգտագործվում էր xfs ֆայլային համակարգը։

Ես համեմատեցի հրամանի միջոցով

docker inspect my-nginx:12345

Բոլոր հեշերը նույնական են, բոլորը մեկ առ մեկ: Ինչպես սերվերի վրա, այնպես էլ իմ վիրտուալ մեքենայի վրա: Ես ջնջեցի տեղական nginx պատկերը և նորից հանեցի ռեեստրից, որը մի շարք պատճառներով նույն մեքենայի վրա է: Իսկ խնդիրը նույնն է... Հիմա երկրորդ աչքս կծկվում է։

Այլևս չեմ հիշում, թե ինչ մտքեր էին գլխումս, բացի «ԱԱԱԱԱԱԱԱԱԱ» գոռալուց և այլ բաներից։ Առավոտյան ժամը 4-ն էր, և Docker-ի սկզբնաղբյուրը օգտագործվեց պատկերի շերտերի հեշավորման սկզբունքը հասկանալու համար։ Բացել է էներգետիկ ըմպելիքի երրորդ տուփը։ Եվ վերջում հասկացա, որ հեշինգը հաշվի է առնում միայն ֆայլը, դրա բովանդակությունը, բայց ՈՉ ՄՈՒՏՔԻ ԻՐԱՎՈՒՆՔՆԵՐ! Այսինքն՝ ինչ-որ առեղծվածային ձևով մեր իրավունքները կորել են, selinux-ն անջատված է, acl-ը չի օգտագործվում, և ոչ մի կպչուն բիթ չկա։

Ես ջնջեցի տեղական պատկերը, ջնջեցի նաև պատկերը դոկերի ռեեստրից և նորից հրեցի այն: Եվ ամեն ինչ ստացվեց: Ստացվում է, որ փոխանցման ժամանակ իրավունքները կորել են ինչպես տեղական պատկերի ներսում, այնպես էլ ռեեստրում ընկած պատկերի ներսում։ Ինչպես արդեն ասացի, մի շարք պատճառներով այն գտնվում էր նույն մեքենայի վրա։ Եվ արդյունքում՝ մեկ գրացուցակում /var/lib/docker։

Եվ ակնկալելով այն հարցը, թե արդյոք նրանք փորձեցին վերադարձնել նավահանգստի հայացքը հին գրացուցակին, ոչ, նրանք չփորձեցին, ավաղ, հանգամանքները թույլ չտվեցին: Այո, և ես իսկապես ուզում էի դա պարզել:

Այս հոդվածը գրելուց հետո խնդրի լուծումն ինձ ակնհայտ է թվում, բայց վերլուծության պահին այդպես չէր թվում։ Անկեղծ ասած, ես գուգլեցի և նման իրավիճակներ չգտա։

Արդյունք. Ես լուծեցի խնդիրը, ես դեռ չեմ հասկանում պատճառը =(

Եթե ​​որևէ մեկը գիտի, կռահում է, տեսլական է ունեցել այս խնդրի հնարավոր պատճառների մասին, ես անչափ ուրախ կլինեմ լսել ձեզնից մեկնաբանություններում:

Source: www.habr.com

Добавить комментарий