Istorija problema migracije docker memorije (docker root)

Prije ne više od par dana, odlučeno je da jedan od servera premjesti docker skladište (direktorij u kojem docker pohranjuje sve datoteke kontejnera i slika) u poseban odjeljak, koji
imao veći kapacitet. Zadatak je izgledao trivijalan i nije predviđao nevolje...

Početak:

1. Zaustavite i ukinite sve kontejnere naše aplikacije:

docker-compose down

ako ima puno kontejnera i oni su u različitim sastavima, možete učiniti ovo:

docker rm -f $(docker ps -q)

2. Zaustavite docker demona:

systemctl stop docker

3. Premjestite imenik na željenu lokaciju:

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

4. Kažemo demonu docker-a da pogleda u novom direktoriju. Postoji nekoliko opcija: ili koristite oznaku -g da pokažete demonu na novu putanju, ili systemd konfiguracije, koje smo koristili. Ili simbolička veza. Neću da ulazim previše u detalje, to je na internetu. pun priručnici o premeštanju docker root-a na novu lokaciju.

5. Pokrenite docker demon i uvjerite se da izgleda na pravom mjestu:

systemctl status docker

U jednom od izlaznih linija trebali bismo vidjeti:

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

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

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

6. Započnimo našu aplikaciju:

docker-compose up -d

7. Provjera

I tu počinje zabava, DBMS, MQ, sve je u redu! Baza je netaknuta, sve radi...osim nginxa. Imamo vlastiti nginx build sa Kerberos i kurtizanama. A pregled dnevnika kontejnera pokazao je da ne može pisati u /var/tmp - Dozvola odbijena. Gnječim sljepoočnice prstima i pokušavam analizirati situaciju... Kako je to moguće? Docker slika se nije promijenila. Upravo smo premjestili imenik. Uvek je funkcionisalo, i evo ga za tebe... Eksperimenta radi, ušao sam rukama u kontejner i promenio prava na ovaj direktorijum, bilo je root, root 755, dao root, root 777. I sve je počelo... Počela mi je zvučati misao u glavi - neka glupost... Mislio sam, pa, možda nisam uzeo u obzir...

Odlučio sam da smo se zaljubili u prava pristupa fajlovima tokom prenosa. Zaustavili smo aplikaciju, docker demon, izbrisali novi direktorij i kopirali /var/lib/docker direktorij koristeći rsync -a.

Mislim da je sada sve u redu, hajde da podignemo Docker aplikaciju.

Aaa... problem je ostao... Oko mi se trzlo. Odjurio sam do konzole svoje virtuelne mašine, gde sam pokrenuo razne testove, imao sam ovu nginx sliku, i popeo sam se u kontejner, a ovde su prava na /var/tmp direktorijum root, root 777. Odnosno, isto kao što sam morao ručno da podesim. Ali slike su identične!

Sistem datoteka xfs se koristio svuda.

Uporedio sam koristeći komandu

docker inspect my-nginx:12345

Svi hashevi su identični, svi jedan prema jedan. I na serveru i na mojoj virtuelnoj mašini. Izbrisao sam lokalnu nginx sliku i ponovo je izvukao iz registra, koji se iz više razloga nalazi na istoj mašini. I problem je isti... Sad mi se trza drugo oko.

Više se ne sjećam koje su mi misli bile u glavi, osim povika “AAAAAAAA” i drugih stvari. Bilo je 4 sata ujutro, a izvorni kod Dockera korišten je za razumijevanje principa heširanja slojeva slike. Otvorena treća konzerva energetskog pića. I na kraju mi ​​je sinulo da heširanje uzima u obzir samo fajl, njegov sadržaj, ali NEMA PRAVA PRISTUPA! Odnosno, na neki misteriozan način su naša prava izgubljena, selinux je onemogućen, acl se ne koristi i nema lepljivog bita.

Izbrisao sam lokalnu sliku, također sam obrisao sliku iz docker registra i ponovo je gurnuo. I sve je funkcionisalo. Ispostavilo se da su tokom 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 se nalazio na istom automobilu. I kao rezultat, u jednom direktoriju /var/lib/docker.

I predviđajući pitanje jesu li pokušali vratiti pogled dockera na stari imenik - ne, nisu pokušali, nažalost, okolnosti to nisu dopuštale. Da, i stvarno sam želio to shvatiti.

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

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

Ako neko zna, nagađa, imao viziju o mogućim uzrocima ovog problema, bit će mi izuzetno drago čuti od vas u komentarima!

izvor: www.habr.com

Dodajte komentar