Historia e problemit të transferimit të docker storage (docker root)

Jo më vonë se para disa ditësh, ishte vendosur që në një nga serverët të zhvendosej docker storage (dosja ku docker ruan të gjitha skedarët e konteinerëve, imazheve) në një ndarje të veçantë që
kishte kapacitet më të madh. Detyra, dukej se ishte triviale dhe nuk premtuar telashe...

Le të fillojmë:

1. Ndërpresim dhe vrasim të gjitha konteinerët e aplikacionit tonë:

docker-compose down

nëse ka shumë konteinerë dhe ata janë në compose të ndryshme, mund të bëjmë kështu:

docker rm -f $(docker ps -q)

2. Ndërpresim demonin docker:

systemctl stop docker

3. Transferojmë dosjen në vendin e duhur:

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

4. Njoftojmë demonin docker të shikojë në drejtorinë e re. Këtu ka disa variante: ose përmes flamurit -g i tregojmë demonit rrugën e re, ose konfigurimet e systemd, që i kemi përdorur. Ose një simlink. Nuk do të zgjatem shumë mbi këtë, në internet ka shumë manuale për transferimin e docker root në vendin e ri.

5. Aktivizojmë demonin docker, dhe vëzhgojmë që ai të shikojë aty ku duhet:

systemctl status docker

Në një nga rreshtat e daljes, duhet të shohim:

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

Pasi u siguruam që demonit i është kaluar opsioni, tani do të kontrollojmë nëse ai e ka zbatuar atë (falenderojmë inkvizitor68sl)!

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

6. Nisëm aplikacionin tonë:

docker-compose up -d

7. Po kontrollojmë

Dhe kĂ«tu fillon gjĂ«ja mĂ« interesante, SGBD, MQ, gjithçka Ă«shtĂ« nĂ« rregull! Baza Ă«shtĂ« e shĂ«ndoshĂ«, gjithçka funksionon... pĂ«rveç nginx. Kemi njĂ« ndĂ«rtim tonin tĂ« nginx me Kerberos dhe kurtesha. Shikimi i logĂ«ve tĂ« kontejnerit tregoi se nuk mund tĂ« shkruajĂ« nĂ« /var/tmp — leje e refuzuar. Po e shtrydh me gishta tempullin dhe pĂ«rpiqem tĂ« analizoj situatĂ«n... Si Ă«shtĂ« e mundur? Imazhi i Docker-it nuk ka ndryshuar. Pra, ne thjesht kaluam direktorinĂ«. GjithmonĂ« ka funksionuar, dhe papritur... PĂ«r eksperiment hyra manualisht nĂ« kontejner dhe ndryshova tĂ« drejtat pĂ«r kĂ«tĂ« katalog, ishin root, root 755, i dhashĂ« root, root 777. Dhe gjithçka filloi... NĂ« kokĂ« mĂ« ra mendimi — njĂ« absurditet... Mendova, ndoshta kam lĂ«nĂ« diçka jashtĂ«...

Vendosa se humbëm të drejtat e aksesit për skedarët gjatë transferimit. E ndaluam aplikacionin, demonin e Docker-it, deleteuam direktorinë e re dhe kryem kopjimin e direktorisë /var/lib/docker duke përdorur rsync -a.

Mendoj, tani sigurisht që gjithçka është mirë, ngremë Docker-in, aplikacionin.

Ehe
 problemi mbeti... Sistemi im nervoz, flaka pĂ«r pak nĂ« konsolĂ«n time tĂ« virtualizuar, ku drejtoj teste tĂ« ndryshme. Kisha kĂ«tĂ« imazh nginx dhe hyra brenda kontejnerit, dhe aty nĂ« katalogun /var/tmp, tĂ« drejtat ishin root, root 777. Pra, ashtu siç kisha vendosur manualisht. Por imazhet janĂ« identike!

Kudo ishte përdorur sistemi i skedarëve xfs.

E krahasova përmes komandës

docker inspect my-nginx:12345

TĂ« gjithĂ« hash-et janĂ« identike, gjithçka Ă«shtĂ« njĂ«soj. Si nĂ« server, ashtu edhe nĂ« virtualizimin tim. E hoqa imazhin lokal nginx dhe e shkarkova pĂ«rsĂ«ri nga registry, qĂ« pĂ«r disa arsye Ă«shtĂ« nĂ« tĂ« njĂ«jtĂ«n makinĂ«. Dhe problemi Ă«shtĂ« i njĂ«jtë  Tani mĂ« Ă«shtĂ« nervozuar sytĂ« e mi.

Nuk e mbaj mend se çfarĂ« mendimesh ishin nĂ« kokĂ«n time, pĂ«rveç thirrjeve "AAAAAA" e tĂ« tjera. NĂ« rrugĂ« Ă«shtĂ« ora 4 tĂ« natĂ«s, kam filluar tĂ« shikoj burimet e docker pĂ«r tĂ« kuptuar parimin e hash-it tĂ« shtresave tĂ« imazhit. E hape treta cans e energjisĂ«. Dhe nĂ« fund, kuptova se hash-i merr nĂ« konsideratĂ« vetĂ«m skedarin, pĂ«rmbajtjen e tij, por NUK KAM TË DREJTAT E QASJES! Kuptoni, pĂ«r njĂ« arsye misterioze, tĂ« drejtat tona janĂ« prishur, ndĂ«rkohĂ« qĂ« selinux Ă«shtĂ« çaktivizuar, acl nuk pĂ«rdoren, dhe sticky bit nuk Ă«shtĂ« aktiv.

Kisha fshiha imazhin lokal, gjithashtu fshiha imazhin nga registri docker dhe e ngarkoha përsëri. Dhe gjithçka funksionoi. Pra, del se gjatë transferimit, të drejtat ishin prishur, si brenda imazhit lokal, ashtu edhe brenda imazhit që ndodhet në registrin. Siç e thashë, për disa arsye, ai ishte vendosur në të njëjtin aparat. Dhe si pasojë, në një katalog /var/lib/docker.

Dhe duke parashikuar pyetjen, a kemi provuar tĂ« kthejmĂ« shikimin e dockers nĂ« katalogun e vjetĂ«r — jo, nuk provuam, pĂ«r fat tĂ« keq, rrethanat nuk lejonin. Edhe dĂ«shira pĂ«r tĂ« zbuluar ishte e madhe.

Pas shkrimit të këtij artikulli, solucionin e problemit e shoh të qartë, por në momentin e analizës nuk dukej ashtu. Sinqerisht kërkova në Google dhe nuk gjeta situata të ngjashme.

Përfundimi: problemi u zgjidh, por arsyen nuk e kuptova =(

NĂ«se dikush e di / ka idenĂ« e mundshme tĂ« arsyjeve tĂ« kĂ«tij problemi — do tĂ« isha jashtĂ«zakonisht i lumtur nĂ« komentet tuaja!

Burimi: habr.com

Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster