Docker krātuves migrācijas problēmas vēsture (docker root)

Ne vairāk kā pirms pāris dienām vienā no serveriem tika nolemts pārvietot docker krātuvi (direktoriju, kurā docker glabā visus konteineru un attēlu failus) uz atseviŔķu sadaļu, kas
bija lielāka kapacitāte. Uzdevums Ŕķita triviāls un neparedzēja nepatikÅ”anas...

Sāksim:

1. Apturiet un iznÄ«ciniet visus mÅ«su lietojumprogrammas konteinerus:

docker-compose down

ja konteineru ir daudz un tie ir dažādos sastāvos, varat rīkoties Ŕādi:

docker rm -f $(docker ps -q)

2. Apturiet docker dēmonu:

systemctl stop docker

3. Pārvietojiet direktoriju uz vajadzÄ«go vietu:

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

4. Mēs sakām dokera dēmonam, lai tas meklētu jauno direktoriju. Ir vairākas iespējas: vai nu izmantojiet karogu -g, lai norādÄ«tu dēmonu uz jaunu ceļu, vai sistēmas konfigurācijas, kuras mēs izmantojām. Vai simboliskā saite. Es neiedziļināŔos Å”ajā jautājumā, tas ir pieejams internetā. pilns rokasgrāmatas par dokera saknes pārvietoÅ”anu uz jaunu vietu.

5. Palaidiet docker dēmonu un pārbaudiet, vai tas izskatās pareizajā vietā:

systemctl status docker

Vienā no izvades rindām mums vajadzētu redzēt:

ā”œā”€19493 /usr/bin/dockerd --data-root=/docker/data/storage

Mēs pārliecinājāmies, ka opcija tika nodota dēmonam, tagad pārbaudīsim, vai tas to piemēro (paldies inkvizitor68sl)!

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

6. Sāksim mÅ«su lietojumprogrammu:

docker-compose up -d

7. Pārbaudiet

Un Å”eit sākas jautrÄ«ba, DBMS, MQ, viss ir kārtÄ«bā! Datu bāze neskarta, viss strādā... izņemot nginx. Mums ir sava nginx versija ar Kerberos un kurtizānēm. Un apskatot konteinera žurnālus, tika norādÄ«ts, ka tas nevar rakstÄ«t uz /var/tmp - Atļauja liegta. Es mÄ«cu deniņus ar pirkstiem un mēģinu analizēt situāciju... Kā tas iespējams? Docker attēls nemainÄ«jās. Mēs tikko pārvietojām direktoriju. Tas vienmēr darbojās, un Å”eit tas ir jums... Eksperimenta labad es ar rokām iegāju konteinerā un mainÄ«ju tiesÄ«bas uz Å”o direktoriju, tur bija sakne, sakne 755, deva sakne, sakne 777. Un viss sākās... Manā galvā sāka skanēt doma - kaut kādas muļķības... Nodomāju, nu, varbÅ«t es kaut ko neņēmu vērā...

Es nolēmu, ka mēs iemÄ«lējām piekļuves tiesÄ«bas failiem pārsÅ«tÄ«Å”anas laikā. Mēs apturējām lietojumprogrammu, docker dēmonu, izdzēsām jauno direktoriju un nokopējām direktoriju /var/lib/docker, izmantojot rsync -a.

Es domāju, ka tagad viss ir kārtībā, paaugstināsim Docker lietojumprogrammu.

Aaand... problēma palika... Mana acs raustÄ«jās. Es steidzos uz savas virtuālās maŔīnas konsoli, kur veicu dažādus testus, man bija Å”is nginx attēls un es iekāpu konteinerā, un Å”eit tiesÄ«bas uz direktoriju /var/tmp ir root, root 777. Tas ir, tas pats, kas man bija jāiestata manuāli. Bet attēli ir identiski!

Visur tika izmantota xfs failu sistēma.

Es salīdzināju, izmantojot komandu

docker inspect my-nginx:12345

Visi hash ir identiski, visi viens pret vienu. Gan serverÄ«, gan manā virtuālajā maŔīnā. Es izdzēsu vietējo nginx attēlu un vēlreiz izvilku to no reÄ£istra, kas vairāku iemeslu dēļ atrodas tajā paŔā datorā. Un problēma viena un tā pati... Tagad man raustÄ«jās otrā acs.

Es vairs neatceros, kādas domas bija manā galvā, turklāt kliedzu ā€œAAAAAAAAAā€ un citas lietas. Pulkstenis bija 4 no rÄ«ta, un tika izmantots Docker pirmkods, lai saprastu attēla slāņu jaukÅ”anas principu. Atvēra treÅ”o enerÄ£ijas dzēriena bundžu. Un beigās man saprata, ka jaukÅ”anā tiek ņemts vērā tikai fails, tā saturs, bet NAV PIEKÄ»UVES TIESÄŖBAS! Tas ir, kaut kādā mistiskā veidā mÅ«su tiesÄ«bas ir zaudētas, selinux ir atspējots, acl netiek izmantots un nav lipÄ«ga bita.

Es izdzēsu vietējo attēlu, izdzēsu attēlu arÄ« no docker reÄ£istra un nospiedu to vēlreiz. Un viss strādāja. Izrādās, ka nodoÅ”anas laikā tiesÄ«bas tika zaudētas gan vietējā attēla iekÅ”pusē, gan reÄ£istrā guļoŔā attēla iekÅ”pusē. Kā jau teicu, vairāku iemeslu dēļ tas atradās tajā paŔā automaŔīnā. Un rezultātā vienā direktorijā /var/lib/docker.

Un, paredzot jautājumu, vai viņi mēģināja atgriezt dokera skatienu uz veco direktoriju - nē, viņi nemēģināja, diemžēl apstākļi to neļāva. Jā, un es ļoti gribēju to izdomāt.

Pēc Ŕī raksta rakstÄ«Å”anas problēmas risinājums man Ŕķiet paÅ”saprotams, taču analÄ«zes brÄ«dÄ« tas tā neŔķita. GodÄ«gi sakot, es meklēju Google un neatradu lÄ«dzÄ«gas situācijas.

Rezultāts: es atrisināju problēmu, joprojām nesaprotu iemeslu =(

Ja kāds zina, uzmin, bija redzējums par iespējamiem Ŕīs problēmas cēloņiem, es ļoti priecāŔos dzirdēt no jums komentāros!

Avots: www.habr.com

Pievieno komentāru