História problému migrácie úložiska docker (koreňový adresár docker)

Nie viac ako pred pár dňami sa na jednom zo serverov rozhodlo presunúť úložisko dockeru (adresár, do ktorého docker ukladá všetky súbory kontajnerov a obrázkov) do samostatnej sekcie, ktorá
mal väčšiu kapacitu. Úloha sa zdala triviálna a nepredpovedala problémy...

Začíname:

1. Zastavte a zabite všetky kontajnery našej aplikácie:

docker-compose down

ak je veľa nádob a sú v rôznom zložení, môžete to urobiť takto:

docker rm -f $(docker ps -q)

2. Zastavte démona docker:

systemctl stop docker

3. Presuňte adresár na požadované miesto:

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

4. Povieme démonovi docker, aby sa pozrel do nového adresára. Existuje niekoľko možností: buď použite príznak -g na nasmerovanie démona na novú cestu, alebo systémové konfigurácie, ktoré sme použili. Alebo symbolický odkaz. Nebudem sa o tom veľmi rozpisovať, je to na internete. plný príručky o premiestnení koreňového adresára doku na nové miesto.

5. Spustite démona docker a uistite sa, že vyzerá na správnom mieste:

systemctl status docker

V jednom z výstupných riadkov by sme mali vidieť:

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

Ubezpečili sme sa, že možnosť bola odovzdaná démonovi, teraz skontrolujeme, či ju použil (vďaka inkvizitor68sl)!

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

6. Začnime našu aplikáciu:

docker-compose up -d

7. Skontrolujte

A tu začína zábava, DBMS, MQ, všetko je v poriadku! Databáza je neporušená, všetko funguje... okrem nginx. Máme vlastnú zostavu nginx s Kerberos a kurtizánami. A zobrazenie protokolov kontajnera ukázalo, že nemôže zapisovať do /var/tmp - Povolenie odmietnuté. Hnietim si spánky prstami a snažím sa analyzovať situáciu... Ako je to možné? Obraz Dockera sa nezmenil. Práve sme presunuli adresár. Vždy to fungovalo a tu je pre vás... Kvôli experimentu som vošiel do kontajnera rukami a zmenil práva na tento adresár, boli tam koreň, koreň 755, dal koreň, koreň 777. A všetko začalo... V hlave sa mi začala ozývať myšlienka - nejaký nezmysel... Pomyslel som si, no, možno som niečo nevzal do úvahy...

Rozhodol som sa, že sme sa zamilovali do prístupových práv k súborom počas prenosu. Zastavili sme aplikáciu, démona docker, vymazali nový adresár a skopírovali adresár /var/lib/docker pomocou rsync -a.

Myslím, že teraz je všetko v poriadku, poďme zdvihnúť aplikáciu Docker.

Aaa... problém ostal... V oku mi trhlo. Vrhol som sa do konzoly môjho virtuálneho stroja, kde som spúšťal rôzne testy, mal som tento obraz nginx a vliezol som do kontajnera a tu sú práva na adresár /var/tmp root, root 777. to isté, čo som musel nastaviť manuálne. Ale obrázky sú rovnaké!

Všade sa používal súborový systém xfs.

Porovnal som pomocou príkazu

docker inspect my-nginx:12345

Všetky hashe sú identické, všetky jedna k jednej. Na serveri aj na mojom virtuálnom stroji. Vymazal som lokálny obraz nginx a znova som ho vytiahol z registra, ktorý je z viacerých dôvodov na rovnakom počítači. A problém je rovnaký... Teraz mi cuká druhé oko.

Už si nepamätám, aké myšlienky som mala v hlave, okrem kriku “AAAAAAAAAA” a iných vecí. Boli 4 hodiny ráno a zdrojový kód Docker bol použitý na pochopenie princípu hashovania vrstiev obrázkov. Otvoril tretiu plechovku energetického nápoja. A nakoniec mi došlo, že hašovanie berie do úvahy len súbor, jeho obsah, ale NEPRÍSTUPOVÉ PRÁVA! To znamená, že nejakým záhadným spôsobom boli stratené naše práva, selinux je zakázaný, acl sa nepoužíva a nie je tam žiadny lepivý kúsok.

Vymazal som lokálny obrázok, vymazal som aj obrázok z registra dockerov a znova som ho poslal. A všetko fungovalo. Ukázalo sa, že počas prenosu sa práva stratili, a to ako vo vnútri lokálneho obrázka, tak aj vo vnútri obrázka ležiaceho v registri. Ako som už povedal, z viacerých dôvodov bol umiestnený na tom istom aute. A vo výsledku v jednom adresári /var/lib/docker.

A predvídať otázku, či sa pokúsili vrátiť pohľad dockera do starého adresára - nie, nepokúsili sa, bohužiaľ, okolnosti to neumožnili. Áno, a naozaj som na to chcel prísť.

Po napísaní tohto článku sa mi zdá riešenie problému zrejmé, ale v čase analýzy sa nezdalo. Úprimne povedané, hľadal som na Googli a nenašiel som podobné situácie.

Výsledok: Problém som vyriešil, stále nechápem dôvod =(

Ak niekto vie, háda, má víziu o možných príčinách tohto problému, budem veľmi rád, keď sa ozvete v komentároch!

Zdroj: hab.com

Pridať komentár