Historio de la docker-stoka migra problemo (docker-radiko)

Antaŭ ne pli ol kelkaj tagoj, estis decidite pri unu el la serviloj movi docker-stokadon (la dosierujon kie docker stokas ĉiujn ujajn kaj bilddosierojn) al aparta sekcio, kiu
havis pli grandan kapablon. La tasko ŝajnis banala kaj ne antaŭdiris problemojn...

Komenci:

1. Haltu kaj mortigu ĉiujn ujojn de nia aplikaĵo:

docker-compose down

se estas multaj ujoj kaj ili estas en malsamaj komponaĵoj, vi povas fari ĉi tion:

docker rm -f $(docker ps -q)

2. Haltu la docker-demonon:

systemctl stop docker

3. Movu la dosierujon al la dezirata loko:

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

4. Ni diras al la docker-demono rigardi en la novan dosierujon. Estas pluraj ebloj: aŭ uzu la -g flagon por montri la demonon al nova vojo, aŭ systemd-agordojn, kiujn ni uzis. Aŭ simbolligo. Mi ne tro detalos pri tio, ĝi estas en la interreto. plena manlibroj pri movi docker-radikon al nova loko.

5. Komencu la docker-demonon kaj certigu, ke ĝi aspektas en la ĝusta loko:

systemctl status docker

En unu el la eliglinioj ni devus vidi:

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

Ni certigis, ke la opcio estas transdonita al la demono, nun ni kontrolu ĉu ĝi aplikis ĝin (dankon inkvizitor68sl)!

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

6. Ni komencu nian aplikaĵon:

docker-compose up -d

7. Kontrolado

Kaj ĉi tie komenciĝas la amuzo, DBMS, MQ, ĉio estas bona! La datumbazo estas sendifekta, ĉio funkcias... krom nginx. Ni havas nian propran nginx-konstruaĵon kun Kerberos kaj korteganoj. Kaj vidi la ujajn protokolojn indikis, ke ĝi ne povas skribi al /var/tmp - Permeso rifuzita. Mi knedas miajn tempiojn per la fingroj kaj provas analizi la situacion... Kiel tio eblas? La bildo de Docker ne ŝanĝiĝis. Ni ĵus movis la dosierujon. Ĝi ĉiam funkciis, kaj jen ĝi estas por vi... Por eksperimento, mi eniris la ujon per miaj manoj kaj ŝanĝis la rajtojn al ĉi tiu dosierujo, estis radiko, radiko 755, donis radiko, radiko 777. Kaj ĉio komenciĝis... Penso eksonis en mia kapo - ia sensencaĵo... Mi pensis, nu, eble mi ion ne konsideris...

Mi decidis, ke ni enamiĝis al la alirrajtoj al la dosieroj dum la translokigo. Ni haltigis la aplikaĵon, la docker-demonon, forigis la novan dosierujon kaj kopiis la dosierujon /var/lib/docker uzante rsync -a.

Mi pensas, ke ĉio estas bona nun, ni altigu la Docker-aplikaĵon.

Aaand... la problemo restis... Mia okulo ektremis. Mi rapidis al la konzolo de mia virtuala maŝino, kie mi kuras diversajn provojn, mi havis ĉi tiun nginx-bildon, kaj mi grimpis en la ujo, kaj ĉi tie la rajtoj al la dosierujo /var/tmp estas radiko, radiko 777. Tio estas, la same kiel mi devis agordi permane. Sed la bildoj estas identaj!

La xfs-dosiersistemo estis uzata ĉie.

Mi komparis uzante la komandon

docker inspect my-nginx:12345

Ĉiuj haŝiŝoj estas identaj, ĉiuj unu al unu. Kaj sur la servilo kaj sur mia virtuala maŝino. Mi forigis la lokan nginx-bildon kaj tiris ĝin denove el la registro, kiu pro kelkaj kialoj estas sur la sama maŝino. Kaj la problemo estas la sama... Nun mia dua okulo ektremas.

Mi ne plu memoras, kiaj pensoj estis en mia kapo, krom kriado "AAAAAAAAA" kaj aliaj aferoj. Estis la 4-a matene, kaj la fontkodo de Docker estis uzata por kompreni la principon de hakado de bildaj tavoloj. Malfermis la trian ladskatolon da energitrinkaĵo. Kaj finfine ekkomprenis min, ke haŝado nur konsideras la dosieron, ĝian enhavon, sed NE ALIRRAJTON! Tio estas, iel mistera maniero niaj rajtoj estas perditaj, selinux estas malŝaltita, acl ne estas uzata, kaj ne estas glueca peceto.

Mi forigis la lokan bildon, ankaŭ forigis la bildon el la docker-registro kaj puŝis ĝin denove. Kaj ĉio funkciis. Rezultas, ke dum la translokigo la rajtoj estis perditaj, kaj ene de la loka bildo kaj ene de la bildo kuŝanta en la registro. Kiel mi jam diris, pro kelkaj kialoj ĝi situis sur la sama aŭto. Kaj kiel rezulto, en unu dosierujo /var/lib/docker.

Kaj antaŭvidante la demandon, ĉu ili provis resendi la rigardon de la doker al la malnova dosierujo - ne, ili ne provis, ve, la cirkonstancoj ne permesis tion. Jes, kaj mi tre volis eltrovi ĝin.

Post verkado de ĉi tiu artikolo, la solvo de la problemo ŝajnas al mi evidenta, sed en la momento de la analizo ne ŝajnis tiel. Sincere, mi Guglodis kaj ne trovis similajn situaciojn.

Rezulto: Mi solvis la problemon, mi ankoraŭ ne komprenas la kialon =(

Se iu scias, divenas, havis vizion pri la eblaj kaŭzoj de ĉi tiu problemo, mi ege ĝojos aŭdi de vi en la komentoj!

fonto: www.habr.com

Aldoni komenton