Zgodovina težave s selitvijo pomnilnika docker (docker root)

Ne več kot pred nekaj dnevi je bilo na enem od strežnikov odločeno, da se shramba dockerja (imenik, kjer docker shranjuje vse vsebne in slikovne datoteke) premakne v ločen razdelek, ki
imel večjo zmogljivost. Naloga se je zdela nepomembna in ni napovedovala težav ...

Začnimo:

1. Ustavite in ubijte vse vsebnike naše aplikacije:

docker-compose down

če je posod veliko in so v različnih sestavah, lahko naredite to:

docker rm -f $(docker ps -q)

2. Ustavite docker demon:

systemctl stop docker

3. Premaknite imenik na želeno mesto:

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

4. Docker demonu rečemo, naj poišče nov imenik. Obstaja več možnosti: ali uporabite zastavico -g, da demonu pokažete novo pot, ali konfiguracije systemd, ki smo jih uporabili mi. Ali pa simbolna povezava. O tem ne bom šel preveč v podrobnosti, to je na internetu. poln priročniki o premikanju korena dockerja na novo lokacijo.

5. Zaženite docker demon in se prepričajte, da je videti na pravem mestu:

systemctl status docker

V eni od izhodnih vrstic bi morali videti:

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

Prepričali smo se, da je bila možnost posredovana demonu, zdaj pa preverimo, ali jo je uporabil (hvala inkvizitor68sl)!

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

6. Začnimo našo aplikacijo:

docker-compose up -d

7. Preverite

In tukaj se začne zabava, DBMS, MQ, vse je v redu! Baza je nedotaknjena, vse deluje ... razen nginx. Imamo lastno zgradbo nginx s Kerberosom in kurtizani. In ogled dnevnikov vsebnika je pokazal, da ne more pisati v /var/tmp – dovoljenje zavrnjeno. S prsti gnetem svoja templja in poskušam analizirati situacijo... Kako je to mogoče? Slika Dockerja se ni spremenila. Pravkar smo premaknili imenik. Vedno je delovalo in tukaj je za vas ... Za eksperiment sem šel z rokami v posodo in spremenil pravice do tega imenika, tam je bilo koren, koren 755, dal koren, koren 777. In vse se je začelo ... V moji glavi je začela zveneti misel - nekakšna neumnost ... Mislil sem, no, morda česa nisem upošteval ...

Odločil sem se, da smo se med prenosom zaljubili v pravice dostopa do datotek. Ustavili smo aplikacijo, demon dockerja, izbrisali nov imenik in prekopirali imenik /var/lib/docker z rsync -a.

Mislim, da je zdaj vse v redu, dvignimo aplikacijo Docker.

Aaa... problem je ostal... Oko mi je trzalo. Pohitel sem do konzole svojega virtualnega stroja, kjer izvajam različne teste, imel sem to sliko nginx in sem zlezel v kontejner in tukaj so pravice do imenika /var/tmp root, root 777. To je enako kot sem moral nastaviti ročno. Ampak slike so enake!

Datotečni sistem xfs je bil uporabljen povsod.

Primerjal sem z uporabo ukaza

docker inspect my-nginx:12345

Vse zgoščene vrednosti so enake, vse ena proti ena. Tako na strežniku kot na mojem virtualnem stroju. Izbrisal sem lokalno sliko nginx in jo znova potegnil iz registra, ki je iz več razlogov na istem računalniku. In problem je isti... Zdaj mi trza drugo oko.

Ne spomnim se več, kakšne misli so bile v moji glavi, poleg kričanja "AAAAAAAAA" in drugih stvari. Ura je bila 4 zjutraj in izvorna koda Docker je bila uporabljena za razumevanje principa zgoščevanja slojev slike. Odprl tretjo pločevinko energijske pijače. In na koncu se mi je posvetilo, da zgoščevanje upošteva samo datoteko, njeno vsebino, ampak NI PRAVIC DOSTOPA! To pomeni, da so bile na nek skrivnosten način izgubljene naše pravice, selinux je onemogočen, acl se ne uporablja in ni lepljivega bita.

Izbrisal sem lokalno sliko, sliko tudi iz registra dockerjev in jo znova potisnil. In vse je delovalo. Izkazalo se je, da so bile med prenosom izgubljene pravice, tako znotraj lokalne slike kot znotraj slike, ki leži v registru. Kot sem že rekel, se je iz več razlogov nahajal na istem avtomobilu. In posledično v enem imeniku /var/lib/docker.

In predvidevanje vprašanja, ali so poskušali vrniti dockerjev pogled v stari imenik - ne, niso poskusili, žal, okoliščine tega niso dopuščale. Da, in res sem želel ugotoviti.

Po pisanju tega članka se mi zdi rešitev problema očitna, v času analize pa se mi ni zdela tako. Iskreno povedano, iskal sem v Googlu in nisem našel podobnih situacij.

Rezultat: Težavo sem rešil, še vedno ne razumem razloga =(

Če kdo ve, ugiba, je imel vizijo o možnih vzrokih te težave, bom zelo vesel, da se oglasite v komentarjih!

Vir: www.habr.com

Dodaj komentar