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 downom 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 docker3. Flytta katalogen till önskad plats:
cp -r /var/lib/docker /docker/data/storage4. 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 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 dockerI en av raderna i utskriften borde vi se:
ââ19493 /usr/bin/dockerd --data-root=/docker/data/storageVi bekrĂ€ftade att vi skickade alternativet till demon, nu ska vi kontrollera om den tillĂ€mpade det (tack )!
docker info | awk '/Root Dir/ {print $NF}' 6. Starta vÄr applikation:
docker-compose up -d7. 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:12345Alla 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
