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 downnë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 docker3. Transferojmë dosjen në vendin e duhur:
cp -r /var/lib/docker /docker/data/storage4. 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 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 dockerNë një nga rreshtat e daljes, duhet të shohim:
ââ19493 /usr/bin/dockerd --data-root=/docker/data/storagePasi u siguruam qĂ« demonit i Ă«shtĂ« kaluar opsioni, tani do tĂ« kontrollojmĂ« nĂ«se ai e ka zbatuar atĂ« (falenderojmĂ« )!
docker info | awk '/Root Dir/ {print $NF}' 6. Nisëm aplikacionin tonë:
docker-compose up -d7. 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:12345Të 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
