Historien om problemet med att flytta dockerstorage (docker root)

Inte lÀngre Àn för ett par dagar sedan beslutades det att flytta dockerlagret (katalogen dÀr docker lagrar alla containrar och bilder) till en separat partition som
hade större kapacitet. Uppgiften verkade vara trivial och förutsatte inga problem...

LÄt oss börja:

1. Stoppa och döda alla containrar av vÄr applikation:

docker-compose down

om det finns mÄnga containrar och de Àr i olika compose-filer kan vi göra sÄ hÀr:

docker rm -f $(docker ps -q)

2. Stoppa docker-demonen:

systemctl stop docker

3. Flytta katalogen till önskad plats:

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

4. BerÀtta för docker-demonen att den ska titta i den nya katalogen. HÀr finns flera alternativ: antingen ange den nya sökvÀgen via flaggan -g, eller anvÀnda systemd-konfigurationerna, som vi anvÀnde. Eller sÄ kan man skapa en symlink. Jag kommer inte att gÄ in pÄ detaljer hÀr, det finns massor av manualer pÄ internet om att flytta docker root till en ny plats.

5. Starta docker-demonen och kontrollera att den pekar Ät rÀtt hÄll:

systemctl status docker

I en av raderna i utskriften borde vi se:

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

Vi bekrÀftade att vi skickade alternativet till demon, nu ska vi kontrollera om den tillÀmpade det (tack inkvizitor68sl)!

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

6. Starta vÄr applikation:

docker-compose up -d

7. Kontrollera

Och hĂ€r börjar det intressanta, databasen, MQ, allt fungerar! Databasen Ă€r intakt, allt fungerar... förutom nginx. Vi har vĂ„r egen version av nginx med Kerberos och kurviga slutsatser. Och visning av loggar frĂ„n containern visade att den inte kunde skriva till /var/tmp - Åtkomst nekad. Jag masserar mina tinningar och försöker analysera situationen... Hur kunde det bli sĂ„? Dockerimagen Ă€ndrades ju inte. Vi flyttade bara katalogen. Det har alltid fungerat, och plötsligt... För experimentets skull gick jag in i containern och Ă€ndrade rĂ€ttigheterna för denna katalog, det varroot, root 755 , gavroot, root 777

. Och allt började fungera... En tanke slog mig - vilken absurditet... Jag tÀnkte, kanske jag missade nÄgot... Jag bestÀmde mig för att vi missade filrÀttigheterna vid överföringen. Vi stoppade applikationen, docker-demonen, tog bort den nya katalogen och kopierade katalogen /var/lib/docker genom att anvÀnda.

rsync -a. Jag tror, nu ska allt vara bra, vi startar docker, applikationen.

Och
 problemet kvarstĂ„r
 Jag har fĂ„tt ett ryck i ögat. Jag skyndade mig till konsolen för min virtuella maskin dĂ€r jag kör olika tester. Jag hade denna nginx-avbild och gick in i containern, och hĂ€r i katalogen /var/tmp Ă€r rĂ€ttigheterna satta till root, root 777. SĂ„dana som jag var tvungen att sĂ€tta manuellt. Men avbildarna Ă€r identiska!

XFS-filsystemet anvÀndes överallt.

Jag jÀmförde med kommandot

docker inspect my-nginx:12345

Alla hashvĂ€rden Ă€r identiska, alla Ă€r en och samma. BĂ„de pĂ„ servern och pĂ„ min virtuella maskin. Jag raderade den lokala nginx-avbilden och drog ner den igen frĂ„n registry som av olika anledningar ligger pĂ„ samma maskin. Och problemet kvarstĂ„r
 Nu har mitt andra öga fĂ„tt ett ryck.

Jag minns inte vilka tankar som fanns i mitt huvud förutom skrik av "AAAAAA" och liknande. Klockan Ă€r fyra pĂ„ morgonen, jag började titta pĂ„ dockerkĂ€llkoden för att förstĂ„ hur hashning av bildlager fungerar. Jag öppnade en tredje burk energidryck. Och till slut insĂ„g jag att hashningen endast tar hĂ€nsyn till filen och dess innehĂ„ll, men INGEN ÅTKOMSTRÄTT! AlltsĂ„, pĂ„ nĂ„got mystiskt sĂ€tt har rĂ€ttigheterna blivit felaktiga, trots att selinux Ă€r avstĂ€ngt, acl inte anvĂ€nds och sticky bit inte Ă€r aktiv.

Jag raderade den lokala avbilden, raderade ocksÄ avbilden frÄn docker registry och pushade upp den igen. Och allt fungerade. Det visar sig att rÀttigheterna blev felaktiga bÄde i den lokala avbilden och i avbilden i registry. Som jag nÀmnde tidigare lÄg den av flera skÀl pÄ samma maskin. Och som en följd i katalogen /var/lib/docker.

Och för att förutse frĂ„gan om vi försökte Ă„terföra docker blicken pĂ„ den gamla katalogen — nej, vi försökte inte, tyvĂ€rr, omstĂ€ndigheterna tillĂ€t inte det. Dessutom ville jag verkligen förstĂ„.

Efter att ha skrivit denna artikel verkar lösningen pÄ problemet uppenbar för mig, men vid tidpunkten för analys verkade den inte sÄ. Jag googlade Àrligt och hittade inga liknande situationer.

Resultatet: jag löste problemet, men förstod inte orsaken =(

Om nĂ„gon har idĂ©er om möjliga orsaker till detta problem — jag skulle vara mycket tacksam för era kommentarer!

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster