Skiednis fan it migraasjeprobleem fan docker-opslach (docker-root)

Net mear as in pear dagen lyn waard op ien fan 'e servers besletten om docker-opslach (de map wêr't docker alle kontener- en ôfbyldingsbestannen opslaat) nei in aparte seksje te ferpleatsen, wat
hie gruttere kapasiteit. De taak like triviaal en foarsei gjin problemen ...

Begjinne:

1. Stopje en deadzje alle konteners fan ús applikaasje:

docker-compose down

as d'r in protte konteners binne en se binne yn ferskate komposysjes, kinne jo dit dwaan:

docker rm -f $(docker ps -q)

2. Stopje de docker-daemon:

systemctl stop docker

3. Ferpleats de map nei de winske lokaasje:

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

4. Wy fertelle de docker-daemon om te sjen yn 'e nije map. D'r binne ferskate opsjes: brûk de flagge -g om de daemon nei in nij paad te wizen, of systemd-konfiguraasjes, dy't wy brûkten. Of in symboal. Ik sil net gean yn te folle detail oer dit, it is op it ynternet. fol hânboeken oer it ferpleatsen fan docker-root nei in nije lokaasje.

5. Start de docker-daemon en soargje derfoar dat it op it goede plak sjocht:

systemctl status docker

Yn ien fan 'e útfierlinen moatte wy sjen:

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

Wy hawwe derfoar soarge dat de opsje waard trochjûn oan de daemon, litte wy no kontrolearje oft it it tapast (tank inkvisitor68sl)!

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

6. Litte wy ús applikaasje begjinne:

docker-compose up -d

7. Kontrolearje

En hjir begjint de wille, DBMS, MQ, alles is goed! De databank is yntakt, alles wurket ... útsein nginx. Wy hawwe ús eigen nginx-build mei Kerberos en courtisanen. En it besjen fan de kontenerlogboeken joech oan dat it net kin skriuwe nei /var/tmp - Tastimming wegere. Ik knead myn timpels mei myn fingers en besykje de situaasje te analysearjen ... Hoe is dit mooglik? De Docker-ôfbylding is net feroare. Wy hawwe krekt de map ferpleatst. It wurke altyd, en hjir is it foar jo ... Foar it eksperimint gie ik mei myn hannen yn 'e kontener en feroare de rjochten op dizze map, d'r wiene root, root 755, joech root, root 777. En alles begûn ... In gedachte begon my yn 'e holle te klinken - in soarte fan ûnsin ... ik tocht, no, miskien haw ik net wat yn 'e rekken ...

Ik besleat dat wy fereale waarden op de tagongsrjochten foar de bestannen tidens de oerdracht. Wy stoppe de applikaasje, de docker-daemon, hawwe de nije map wiske en de map /var/lib/docker kopiearre mei rsync -a.

Ik tink dat alles no goed is, litte wy de Docker-applikaasje ferheegje.

Aaand... it probleem bleau... Myn each trille. Ik rûn nei de konsole fan myn firtuele masine, wêr't ik ferskate tests útfiere, ik hie dizze nginx-ôfbylding, en ik klom yn 'e kontener, en hjir binne de rjochten foar de /var/tmp-map root, root 777. Dat is, de itselde as ik manuell ynstelle moast. Mar de bylden binne identyk!

It xfs-bestânsysteem waard oeral brûkt.

Ik fergelike mei it brûken fan it kommando

docker inspect my-nginx:12345

Alle hashes binne identyk, allegear ien op ien. Sawol op 'e server as op myn firtuele masine. Ik haw de lokale nginx-ôfbylding wiske en it wer út 'e registraasje lutsen, dy't foar in oantal redenen op deselde masine is. En it probleem is itselde... No krûpt myn twadde each.

Ik wit net mear wat gedachten wiene yn myn holle, neist it roppen fan "AAAAAAAAAA" en oare dingen. It wie 4 oere moarns, en de Docker-boarnekoade waard brûkt om it prinsipe te begripen fan it hashen fan ôfbyldinglagen. It tredde blikje enerzjydrank iepene. En op it lêst kaam it my troch dat hashing allinnich rekken hâldt mei de triem, de ynhâld, mar NET tagongsrjochten! Dat is, op ien of oare mysterieuze manier binne ús rjochten ferlern gien, selinux is útskeakele, acl wurdt net brûkt, en d'r is gjin plakkerich bit.

Ik haw de lokale ôfbylding wiske, de ôfbylding ek wiske út it docker-register en drukte it nochris. En alles wurke. It docht bliken dat by de oerdracht de rjochten ferlern gien binne, sawol yn 'e pleatslike ôfbylding as yn' e ôfbylding dy't yn it register leit. Lykas ik al sei, foar in oantal redenen wie it op deselde auto. En as gefolch, yn ien map /var/lib/docker.

En it antisipearjen fan 'e fraach oft se besochten de blik fan' e docker werom te jaan nei de âlde map - nee, se besochten net, helaas, omstannichheden lieten it net ta. Ja, en ik woe it echt útfine.

Nei it skriuwen fan dit artikel liket de oplossing foar it probleem my fanselssprekkend, mar op it momint fan analyze like it net sa. Earlik sein, ik googlede en fûn gjin ferlykbere situaasjes.

Resultaat: ik haw it probleem oplost, ik begryp de reden noch net =(

As immen wit, riedt, in fyzje hie oer de mooglike oarsaken fan dit probleem, sil ik tige bliid wêze om fan jo te hearren yn 'e kommentaren!

Boarne: www.habr.com

Add a comment