A Docker Storage migrációs probléma története (docker root)

Legfeljebb pár napja az egyik szerver úgy döntött, hogy a Docker Storage-t (az a könyvtár, ahol a docker az összes konténer- és képfájlt tárolja) egy külön szakaszba helyezi át, amely
nagyobb volt a kapacitása. A feladat triviálisnak tűnt, és nem jósolott bajt...

Kezdeti lépések:

1. Állítsa le és ölje meg az alkalmazásunk összes tárolóját:

docker-compose down

ha sok tartály van, és különböző összetételűek, akkor ezt megteheti:

docker rm -f $(docker ps -q)

2. Állítsa le a docker démont:

systemctl stop docker

3. Helyezze át a könyvtárat a kívánt helyre:

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

4. Megmondjuk a docker démonnak, hogy nézzen be az új könyvtárba. Több lehetőség is van: vagy használja a -g kapcsolót, hogy a démont egy új elérési útra mutassa, vagy a systemd konfigurációkat, amelyeket használtunk. Vagy szimbolikus link. Nem részletezem ezt túlságosan, fent van az interneten. teljes kézikönyvek a docker root új helyre költöztetéséről.

5. Indítsa el a docker démont, és győződjön meg arról, hogy a megfelelő helyen néz ki:

systemctl status docker

Az egyik kimeneti sorban látnunk kell:

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

Megbizonyosodtunk arról, hogy az opciót átadtuk a démonnak, most nézzük meg, hogy alkalmazta-e (köszi inkvizitor68sl)!

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

6. Indítsuk el az alkalmazásunkat:

docker-compose up -d

7. Ellenőrzés

És itt kezdődik a móka, DBMS, MQ, minden rendben! Az adatbázis sértetlen, minden működik... kivéve az nginxet. Megvan a saját nginx buildünk Kerberossal és kurtizánokkal. És a tárolónaplók megtekintése azt mutatta, hogy nem tud írni a /var/tmp fájlba - Engedély megtagadva. Az ujjaimmal gyúrom a halántékomat, és próbálom elemezni a helyzetet... Hogyan lehetséges ez? A Docker-kép nem változott. Most helyeztük át a könyvtárat. Mindig működött, és itt van neked... A kísérlet kedvéért bementem a kezemmel a konténerbe, és megváltoztattam ennek a könyvtárnak a jogait, voltak gyökér, gyökér 755, adott gyökér, gyökér 777. És minden elkezdődött... Egy gondolat kezdett megszólalni a fejemben - valami hülyeség... Arra gondoltam, hát, talán nem vettem figyelembe valamit...

Úgy döntöttem, hogy az átvitel során beleszerettünk a fájlokhoz való hozzáférési jogokba. Leállítottuk az alkalmazást, a docker démont, töröltük az új könyvtárat és átmásoltuk a /var/lib/docker könyvtárat rsync -a.

Azt hiszem, most már minden rendben van, tegyük fel a Docker alkalmazást.

Aaand... a probléma megmaradt... Megrándult a szemem. Rohantam a virtuális gépem konzoljához, ahol különféle teszteket futtatok, megvolt ez az nginx kép, és bemásztam a konténerbe, és itt a /var/tmp könyvtár jogai root, root 777. Vagyis a ugyanaz, mint amit manuálisan kellett beállítani. De a képek egyformák!

Az xfs fájlrendszert mindenhol használták.

Összehasonlítottam a parancs használatával

docker inspect my-nginx:12345

Minden hash azonos, mindegyik egytől egyig. A szerveren és a virtuális gépemen is. Töröltem a helyi nginx képet, és újra kivettem a rendszerleíró adatbázisból, amely több okból is ugyanazon a gépen található. És a probléma ugyanaz... Most a második szemem rángatózik.

Már nem emlékszem, milyen gondolatok jártak a fejemben, azon kívül, hogy „ÁÁÁÁÁÁÁÁÁÁ” és más dolgokon kiáltottam. Hajnali 4 óra volt, és a Docker forráskódot használták a képrétegek kivonatolási elvének megértéséhez. Kinyitotta a harmadik doboz energiaitalt. És a végén az jutott eszembe, hogy a hashelés csak a fájlt veszi figyelembe, annak tartalmát, de NEM HOZZÁFÉRÉSI JOGOK! Vagyis valami rejtélyes módon elvesztek a jogaink, a selinux le van tiltva, az acl nincs használva, és nincs ragadós bit.

Töröltem a helyi képet, töröltem a képet a docker registry-ből is, és újra lenyomtam. És minden működött. Kiderült, hogy az átvitel során a jogok elvesztek, mind a helyi képen belül, mind a rendszerleíró adatbázisban lévő képen belül. Mint már mondtam, több okból is ugyanazon az autón volt. Ennek eredményeként egy /var/lib/docker könyvtárban.

És megelőlegezve azt a kérdést, hogy megpróbálták-e visszaterelni a dokkoló tekintetét a régi címtárba - nem, nem próbálkoztak, sajnos a körülmények nem tették lehetővé. Igen, és nagyon szerettem volna rájönni.

A cikk megírása után a probléma megoldása kézenfekvőnek tűnik számomra, de az elemzés pillanatában nem úgy tűnt. Őszintén szólva, kerestem a Google-on, és nem találtam hasonló helyzeteket.

Eredmény: Megoldottam a problémát, de még mindig nem értem az okát =(

Ha valaki tudja, sejti, van elképzelése a probléma lehetséges okairól, nagyon örülök, ha megosztja velünk véleményét a megjegyzésekben!

Forrás: will.com

Hozzászólás