Docker-tallennustilan siirto-ongelman historia (docker-juuri)

Pari päivää sitten yksi palvelimista päätettiin siirtää Docker-tallennustila (hakemisto, johon docker tallentaa kaikki kontti- ja kuvatiedostot) erilliseen osioon, joka
oli suurempi kapasiteetti. Tehtävä vaikutti vähäpätöiseltä eikä ennustanut ongelmia...

Aloitetaan:

1. Pysäytä ja lopeta kaikki sovelluksemme säiliöt:

docker-compose down

Jos säiliöitä on paljon ja ne ovat eri koostumuksissa, voit tehdä tämän:

docker rm -f $(docker ps -q)

2. Pysäytä Docker-daemon:

systemctl stop docker

3. Siirrä hakemisto haluamaasi paikkaan:

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

4. Kehotamme docker-daemonia katsomaan uudesta hakemistosta. Vaihtoehtoja on useita: joko käytä -g-lippua osoittaaksesi demonin uudelle polulle, tai systemd configs, joita käytimme. Tai symbolilinkki. En mene tähän liian yksityiskohtiin, se on Internetissä. koko käsikirjat telakkajuuren siirtämisestä uuteen paikkaan.

5. Käynnistä Docker-daemon ja varmista, että se näyttää oikealta paikalta:

systemctl status docker

Yhdellä tulosrivillä meidän pitäisi nähdä:

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

Varmistimme, että vaihtoehto välitettiin demonille, nyt tarkistetaan, käyttikö se sitä (kiitos inkvizitor68sl)!

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

6. Aloitetaan sovelluksemme:

docker-compose up -d

7. Tarkistaminen

Ja tästä hauskuus alkaa, DBMS, MQ, kaikki on hyvin! Tietokanta on ehjä, kaikki toimii... paitsi nginx. Meillä on oma nginx-versiomme Kerberosin ja kurtisaanien kanssa. Ja konttilokien tarkastelu osoitti, että se ei voi kirjoittaa tiedostoon /var/tmp - Lupa estetty. Hikoilen ohimoani sormillani ja yritän analysoida tilannetta... Miten tämä on mahdollista? Docker-kuva ei muuttunut. Siirsimme juuri hakemiston. Se toimi aina, ja tässä se on sinulle... Kokeilun vuoksi menin käsilläni säiliöön ja vaihdoin oikeudet tähän hakemistoon, siellä oli juuri, juuri 755, antoi juuri, juuri 777. Ja kaikki alkoi... Päässäni alkoi kuulua ajatus - jonkinlaista hölynpölyä... Ajattelin, että no, ehkä en ottanut jotain huomioon...

Päätin, että rakastuimme tiedostojen käyttöoikeuksiin siirron aikana. Pysäytimme sovelluksen, Docker-daemonin, poistimme uuden hakemiston ja kopioimme /var/lib/docker-hakemiston käyttämällä rsync -a.

Mielestäni kaikki on nyt hyvin, nostetaan Docker-sovellus.

Aa ja... ongelma jäi... Silmäni nykivät. Ryntäsin virtuaalikoneeni konsoliin, jossa suoritin erilaisia ​​testejä, minulla oli tämä nginx-kuva, ja kiipesin kontin sisään, ja tässä oikeudet /var/tmp-hakemistoon ovat root, root 777. Eli sama kuin minun piti asettaa manuaalisesti. Mutta kuvat ovat identtisiä!

xfs-tiedostojärjestelmää käytettiin kaikkialla.

Vertailin komennon käyttöä

docker inspect my-nginx:12345

Kaikki tiivisteet ovat identtisiä, kaikki yksi yhteen. Sekä palvelimella että virtuaalikoneellani. Poistin paikallisen nginx-kuvan ja vedin sen uudelleen rekisteristä, joka useista syistä on samassa koneessa. Ja ongelma on sama... Nyt toinen silmäni nykii.

En enää muista mitä ajatuksia päässäni oli, paitsi "AAAAAAAAA" huutamista ja muita asioita. Kello oli neljä aamulla, ja Dockerin lähdekoodia käytettiin ymmärtämään kuvakerrosten hajautusperiaatetta. Avasi kolmannen tölkin energiajuomaa. Ja lopulta tajusin, että hajautus ottaa huomioon vain tiedoston, sen sisällön, mutta EI KÄYTTÖOIKEUDET! Eli jollain mysteerillä tavalla oikeutemme ovat kadonneet, selinux on poistettu käytöstä, acl:ia ei käytetä eikä tahmeaa bittiä ole.

Poistin paikallisen kuvan, poistin kuvan myös Docker-rekisteristä ja työnsin sen uudelleen. Ja kaikki toimi. Osoittautuu, että siirron aikana oikeudet menetettiin sekä paikallisen kuvan sisällä että rekisterissä olevan kuvan sisällä. Kuten jo sanoin, useista syistä se sijaitsi samassa autossa. Ja seurauksena yhdessä hakemistossa /var/lib/docker.

Ja ennakoiden kysymystä, yrittivätkö he palauttaa telakan katseen vanhaan hakemistoon - ei, he eivät yrittäneet, valitettavasti olosuhteet eivät sallineet sitä. Kyllä, ja halusin todella selvittää sen.

Tämän artikkelin kirjoittamisen jälkeen ratkaisu ongelmaan näyttää minusta ilmeiseltä, mutta analyysin aikana se ei näyttänyt siltä. Rehellisesti sanottuna googletin enkä löytänyt vastaavia tilanteita.

Tulos: Ratkaisin ongelman, en vieläkään ymmärrä syytä =(

Jos joku tietää, arvaa, oli näkemys tämän ongelman mahdollisista syistä, olen erittäin iloinen kuullessani sinusta kommenteissa!

Lähde: will.com

Lisää kommentti