Historial do problema de migración de almacenamento docker (raíz docker)

Hai non máis dun par de días, decidiuse nun dos servidores mover o almacenamento do docker (o directorio onde docker almacena todos os ficheiros de contedores e imaxes) a unha sección separada, que
tiña maior capacidade. A tarefa parecía trivial e non auguraba problemas...

Primeiros pasos:

1. Detén e elimina todos os contedores da nosa aplicación:

docker-compose down

se hai moitos recipientes e están en diferentes composicións, podes facelo:

docker rm -f $(docker ps -q)

2. Detén o daemon docker:

systemctl stop docker

3. Move o directorio ao lugar desexado:

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

4. Dicímoslle ao daemon docker que busque no novo directorio. Hai varias opcións: ou usar a marca -g para apuntar o daemon a un novo camiño, ou as configuracións systemd, que usamos. Ou unha ligazón simbólica. Non vou entrar en demasiados detalles sobre isto, está en Internet. cheo manuais para mover o root docker a unha nova localización.

5. Inicia o daemon docker e asegúrate de que se ve no lugar correcto:

systemctl status docker

Nunha das liñas de saída deberíamos ver:

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

Asegurámonos de que a opción se pasase ao daemon, agora imos comprobar se a aplicou (grazas inkvizitor68sl)!

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

6. Comecemos a nosa aplicación:

docker-compose up -d

7. Comproba

E aquí comeza a diversión, DBMS, MQ, todo está ben! A base de datos está intacta, todo funciona... menos nginx. Temos a nosa propia compilación nginx con Kerberos e cortesás. E ver os rexistros do contedor indicou que non pode escribir en /var/tmp - Permiso denegado. Amaso as tempas cos dedos e intento analizar a situación... Como é posible? A imaxe de Docker non cambiou. Acabamos de mover o directorio. Sempre funcionou, e aquí está para ti... Para experimentar, entrei no contedor coas miñas mans e cambiei os dereitos deste directorio, había raíz, raíz 755, deu raíz, raíz 777. E todo comezou... Un pensamento comezou a soar na miña cabeza, unha especie de tontería... Pensei, ben, quizais non tiven en conta algo...

Decidín que nos namoramos dos dereitos de acceso aos ficheiros durante a transferencia. Paramos a aplicación, o daemon docker, eliminamos o novo directorio e copiamos o directorio /var/lib/docker usando rsync -a.

Creo que todo está ben agora, imos aumentar a aplicación Docker.

Aaand... o problema seguiu... O meu ollo torceu. Corrín á consola da miña máquina virtual, onde realizo varias probas, tiña esta imaxe de nginx e subín dentro do contedor, e aquí os dereitos do directorio /var/tmp son root, root 777. É dicir, o o mesmo que tiven que configurar manualmente. Pero as imaxes son idénticas!

O sistema de ficheiros xfs utilizouse en todas partes.

Comparei usando o comando

docker inspect my-nginx:12345

Todos os hash son idénticos, todos un a un. Tanto no servidor como na miña máquina virtual. Eliminei a imaxe nginx local e tirei de novo do rexistro, que por varias razóns está na mesma máquina. E o problema é o mesmo... Agora o meu segundo ollo tómame.

Xa non lembro que pensamentos tiña na miña cabeza, ademais de gritar "AAAAAAAAA" e outras cousas. Eran as 4 da mañá e utilizouse o código fonte de Docker para comprender o principio de hash das capas de imaxe. Abriuse a terceira lata de bebida enerxética. E ao final deume conta de que o hash só ten en conta o ficheiro, o seu contido, pero NON DEREITOS DE ACCESO! É dicir, dalgunha forma misteriosa perdéronse os nosos dereitos, selinux está desactivado, non se usa acl e non hai ningún pegamento.

Eliminei a imaxe local, tamén eliminei a imaxe do rexistro docker e empuxei de novo. E todo funcionou. Resulta que durante a transferencia se perderon os dereitos, tanto dentro da imaxe local como dentro da imaxe que se atopaba no rexistro. Como xa dixen, por varias razóns estaba situado no mesmo coche. E como resultado, nun directorio /var/lib/docker.

E anticipando a pregunta de se tentaron devolver a mirada do docker ao directorio antigo - non, non o intentaron, por desgraza, as circunstancias non o permitiron. Si, e tiña moitas ganas de descubrir.

Despois de escribir este artigo, a solución do problema paréceme obvia, pero no momento da análise non o parecía. Sinceramente, busquei en Google e non atopei situacións similares.

Resultado: resolvín o problema, aínda non entendo o motivo =(

Se alguén sabe, adiviña, tivo unha visión sobre as posibles causas deste problema, estarei moi feliz de saber de ti nos comentarios!

Fonte: www.habr.com

Engadir un comentario