Povijest problema migracije docker pohrane (docker root)

Prije ne više od nekoliko dana, na jednom od poslužitelja odlučeno je da se docker storage (direktorij u koji docker pohranjuje sve spremnike i slikovne datoteke) premjesti u zasebnu sekciju, što
imao veći kapacitet. Zadatak se činio trivijalan i nije najavljivao nevolje...

Početak:

1. Zaustavite i ubijte sve spremnike naše aplikacije:

docker-compose down

ako ima puno spremnika i oni su u različitim sastavima, možete učiniti sljedeće:

docker rm -f $(docker ps -q)

2. Zaustavite docker demona:

systemctl stop docker

3. Premjestite imenik na željeno mjesto:

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

4. Kažemo docker demonu da pogleda u novi direktorij. Postoji nekoliko opcija: ili upotrijebite zastavu -g za usmjeravanje demona na novu stazu, ili konfiguracije sustava, koje smo mi koristili. Ili simbolička veza. Neću ići previše u detalje o tome, ima na internetu. pun priručnike o premještanju docker roota na novu lokaciju.

5. Pokrenite docker demon i provjerite izgleda li na pravom mjestu:

systemctl status docker

U jednom od izlaznih redova trebali bismo vidjeti:

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

Uvjerili smo se da je opcija proslijeđena demonu, sada provjerimo je li ju primijenio (hvala inkvizitor68sl)!

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

6. Pokrenimo našu aplikaciju:

docker-compose up -d

7. Provjeravanje

I tu počinje zabava, DBMS, MQ, sve je u redu! Baza je netaknuta, sve radi... osim nginxa. Imamo vlastitu nginx verziju s Kerberosom i kurtizanama. I gledanje zapisnika spremnika pokazalo je da ne može pisati u /var/tmp - Dopuštenje odbijeno. Gnječim sljepoočnice prstima i pokušavam analizirati situaciju... Kako je to moguće? Docker slika se nije promijenila. Upravo smo premjestili imenik. Uvijek je radilo, a evo ga za vas... Eksperimenta radi, rukama sam ušao u kontejner i promijenio prava na ovaj imenik, bilo je korijen, korijen 755, dali korijen, korijen 777. I sve je počelo ... U glavi mi je počela zvučati misao - nekakva glupost ... Pomislio sam, pa, možda nešto nisam uzeo u obzir ...

Odlučio sam da smo se zaljubili u prava pristupa datotekama tijekom prijenosa. Zaustavili smo aplikaciju, docker demon, izbrisali novi direktorij i kopirali direktorij /var/lib/docker pomoću rsync -a.

Mislim da je sada sve u redu, podignimo Docker aplikaciju.

Aaa... problem je ostao... Oko mi se trznulo. Odjurio sam do konzole svog virtualnog stroja, gdje izvodim razne testove, imao sam ovu nginx sliku, i ušao sam u kontejner, a ovdje su prava na /var/tmp direktorij root, root 777. To jest, isto kao što sam morao postaviti ručno. Ali slike su identične!

Datotečni sustav xfs korišten je posvuda.

Usporedio sam pomoću naredbe

docker inspect my-nginx:12345

Svi hashovi su identični, svi jedan prema jedan. I na serveru i na mom virtualnom stroju. Izbrisao sam lokalnu nginx sliku i ponovno je povukao iz registra, koji je iz više razloga na istom računalu. A problem je isti... Sad mi trza i drugo oko.

Ne sjećam se više koje su mi misli bile u glavi, osim vikanja “AAAAAAAAA” i ostalih stvari. Bilo je 4 sata ujutro, a izvorni kod Dockera korišten je za razumijevanje principa raspršivanja slojeva slike. Otvorio treću limenku energetskog pića. I na kraju mi ​​je sinulo da hashiranje uzima u obzir samo datoteku, njen sadržaj, ali NEMA PRAVA PRISTUPA! To jest, na neki misteriozan način naša su prava izgubljena, selinux je onemogućen, acl se ne koristi i nema sticky bit-a.

Izbrisao sam lokalnu sliku, također izbrisao sliku iz docker registra i ponovno je gurnuo. I sve je radilo. Ispostavilo se da su tijekom prijenosa prava izgubljena, kako unutar lokalne slike tako i unutar slike koja leži u registru. Kao što sam već rekao, iz više razloga nalazio se na istom autu. I kao rezultat, u jednom direktoriju /var/lib/docker.

I očekujući pitanje jesu li pokušali vratiti dockerov pogled na stari imenik - ne, nisu pokušali, nažalost, okolnosti to nisu dopuštale. Da, i stvarno sam to želio shvatiti.

Nakon pisanja ovog članka, rješenje problema čini mi se očiglednim, ali u trenutku analize nije se činilo tako. Iskreno, guglao sam i nisam našao slične situacije.

Rezultat: Riješio sam problem, još uvijek ne razumijem razlog =(

Ako netko zna, nagađa, imao je viziju o mogućim uzrocima ovog problema, bit će mi izuzetno drago da se javite u komentarima!

Izvor: www.habr.com

Dodajte komentar