Historial del problema de migració d'emmagatzematge Docker (docker root)

No fa més d'un parell de dies, es va decidir en un dels servidors moure l'emmagatzematge de Docker (el directori on Docker emmagatzema tots els contenidors i fitxers d'imatge) a una secció separada, que
tenia més capacitat. La tasca semblava trivial i no va predir problemes...

Primers passos:

1. Atureu i mateu tots els contenidors de la nostra aplicació:

docker-compose down

si hi ha molts envasos i estan en diferents composicions, podeu fer això:

docker rm -f $(docker ps -q)

2. Atureu el dimoni docker:

systemctl stop docker

3. Mou el directori a la ubicació desitjada:

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

4. Diem al dimoni docker que busqui al directori nou. Hi ha diverses opcions: utilitzar el senyalador -g per apuntar el dimoni a un camí nou, o les configuracions del sistema, que hem utilitzat. O un enllaç simbòlic. No entraré en massa detalls sobre això, està a Internet. ple manuals per moure l'arrel de Docker a una nova ubicació.

5. Inicieu el dimoni docker i assegureu-vos que es veu al lloc correcte:

systemctl status docker

En una de les línies de sortida hauríem de veure:

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

Ens vam assegurar que l'opció es va passar al dimoni, ara comprovem si l'ha aplicat (gràcies inkvizitor68sl)!

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

6. Comencem la nostra aplicació:

docker-compose up -d

7. Comprovació

I aquí comença la diversió, DBMS, MQ, tot està bé! La base de dades està intacta, tot funciona... excepte nginx. Tenim la nostra pròpia compilació nginx amb Kerberos i cortesanes. I veure els registres del contenidor va indicar que no pot escriure a /var/tmp - Permís denegat. Em pasto les temples amb els dits i intento analitzar la situació... Com és possible? La imatge de Docker no ha canviat. Acabem de moure el directori. Sempre va funcionar, i aquí està per a tu... Per tal d'experimentar, vaig entrar al contenidor amb les meves mans i vaig canviar els drets d'aquest directori, hi havia arrel, arrel 755, va donar arrel, arrel 777. I tot va començar... Un pensament va començar a sonar al meu cap, una mena de tonteries... Vaig pensar, bé, potser no vaig tenir res en compte...

Vaig decidir que ens vam enamorar dels drets d'accés als fitxers durant la transferència. Vam aturar l'aplicació, el dimoni docker, vam eliminar el directori nou i vam copiar el directori /var/lib/docker utilitzant rsync -a.

Crec que tot està bé ara, anem a plantejar l'aplicació Docker.

Aaand... el problema va romandre... Se'm va cridar l'ull. Em vaig precipitar a la consola de la meva màquina virtual, on vaig fer diverses proves, tenia aquesta imatge nginx i vaig pujar dins del contenidor, i aquí els drets del directori /var/tmp són root, root 777. És a dir, el el mateix que vaig haver de configurar manualment. Però les imatges són idèntiques!

El sistema de fitxers xfs es va utilitzar a tot arreu.

Vaig comparar utilitzant l'ordre

docker inspect my-nginx:12345

Tots els hash són idèntics, tots un a un. Tant al servidor com a la meva màquina virtual. Vaig suprimir la imatge nginx local i la vaig tornar a treure del registre, que per diversos motius es troba a la mateixa màquina. I el problema és el mateix... Ara el meu segon ull em tremola.

Ja no recordo quins pensaments tenia al meu cap, a més de cridar "AAAAAAAAA" i altres coses. Són les 4 de la matinada i el codi font de Docker es va utilitzar per entendre el principi de la funció hash de les capes d'imatge. Va obrir la tercera llauna de beguda energètica. I al final em vaig adonar que el hashing només té en compte el fitxer, el seu contingut, però NO DRET D'ACCÉS! És a dir, d'alguna manera misteriosa, els nostres drets s'han perdut, selinux està desactivat, no s'utilitza acl i no hi ha cap mena enganxosa.

Vaig suprimir la imatge local, també vaig esborrar la imatge del registre docker i la vaig tornar a empènyer. I tot va funcionar. Resulta que durant la cessió es van perdre els drets, tant dins de la imatge local com dins de la imatge que es troba al registre. Com ja he dit, per diversos motius es trobava al mateix cotxe. I com a resultat, en un directori /var/lib/docker.

I anticipant-se a la pregunta de si van intentar tornar la mirada del docker al directori antic: no, no ho van intentar, per desgràcia, les circumstàncies no ho van permetre. Sí, i tenia moltes ganes d'esbrinar-ho.

Després d'escriure aquest article, la solució al problema em sembla òbvia, però en el moment de l'anàlisi no ho semblava. Sincerament, vaig buscar a Google i no vaig trobar situacions similars.

Resultat: he resolt el problema, encara no entenc el motiu =(

Si algú sap, endevina, va tenir una visió sobre les possibles causes d'aquest problema, estaré molt content d'escoltar-vos als comentaris!

Font: www.habr.com

Afegeix comentari