Kasaysayan ng problema sa paglipat ng docker storage (root ng docker)

Hindi hihigit sa ilang araw ang nakalipas, napagpasyahan sa isa sa mga server na ilipat ang imbakan ng docker (ang direktoryo kung saan iniimbak ng docker ang lahat ng lalagyan at mga file ng imahe) sa isang hiwalay na seksyon, na kung saan
nagkaroon ng mas malaking kapasidad. Ang gawain ay tila walang halaga at hindi naghula ng problema...

Magsimula na tayo:

1. Ihinto at patayin ang lahat ng container ng aming application:

docker-compose down

kung maraming lalagyan at nasa iba't ibang komposisyon, magagawa mo ito:

docker rm -f $(docker ps -q)

2. Itigil ang docker daemon:

systemctl stop docker

3. Ilipat ang direktoryo sa gustong lokasyon:

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

4. Sinasabi namin sa docker daemon na tumingin sa bagong direktoryo. Mayroong ilang mga pagpipilian: alinman sa gamitin ang -g flag upang ituro ang daemon sa isang bagong landas, o systemd configs, na ginamit namin. O isang symlink. Hindi na ako magdetalye tungkol dito, nasa Internet ito. puno na mga manual sa paglipat ng docker root sa isang bagong lokasyon.

5. Simulan ang docker daemon at tiyaking nasa tamang lugar ito:

systemctl status docker

Sa isa sa mga linya ng output dapat nating makita:

β”œβ”€19493 /usr/bin/dockerd --data-root=/docker/data/storage

Sinigurado namin na ang opsyon ay naipasa sa daemon, ngayon tingnan natin kung inilapat ito (salamat inkvizitor68sl)!

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

6. Simulan natin ang aming aplikasyon:

docker-compose up -d

7. Suriin

At dito magsisimula ang saya, DBMS, MQ, maayos ang lahat! Buo ang database, gumagana ang lahat... maliban sa nginx. Mayroon kaming sariling nginx build kasama ang Kerberos at courtesans. At ang pagtingin sa mga log ng lalagyan ay nagpapahiwatig na hindi ito maaaring sumulat sa /var/tmp - Tinanggihan ang pahintulot. Minamasa ko ang aking mga templo gamit ang aking mga daliri at sinusubukang suriin ang sitwasyon... Paano ito posible? Ang imahe ng Docker ay hindi nagbago. Kakalipat lang namin ng directory. Ito ay palaging gumagana, at narito ito para sa iyo... Para sa kapakanan ng eksperimento, pumunta ako sa lalagyan gamit ang aking mga kamay at binago ang mga karapatan sa direktoryong ito, mayroong ugat, ugat 755, nagbigay ugat, ugat 777. At nagsimula ang lahat... Isang pag-iisip ang nagsimulang tumunog sa aking isipan - isang uri ng kalokohan... Naisip ko, mabuti, marahil ay hindi ko isinasaalang-alang ang isang bagay...

Napagpasyahan kong umibig kami sa mga karapatan sa pag-access sa mga file sa panahon ng paglilipat. Itinigil namin ang application, ang docker daemon, tinanggal ang bagong direktoryo at kinopya ang /var/lib/docker na direktoryo gamit ang rsync -a.

Sa tingin ko ay maayos na ang lahat, itaas natin ang application ng Docker.

Aaand... the problem remained... Namilog ang mata ko. Nagmadali ako sa console ng aking virtual machine, kung saan nagpapatakbo ako ng iba't ibang mga pagsubok, mayroon akong nginx na imahe, at umakyat ako sa loob ng lalagyan, at dito ang mga karapatan sa /var/tmp na direktoryo ay root, root 777. Iyon ay, ang katulad ng kailangan kong itakda nang manu-mano. Ngunit ang mga imahe ay magkapareho!

Ang xfs file system ay ginamit kahit saan.

Inihambing ko ang paggamit ng utos

docker inspect my-nginx:12345

Ang lahat ng mga hash ay magkapareho, lahat ng isa sa isa. Parehong sa server at sa aking virtual machine. Tinanggal ko ang lokal na imahe ng nginx at hinila ito muli mula sa pagpapatala, na sa ilang kadahilanan ay nasa parehong makina. At ang problema ay pareho... Ngayon ang aking pangalawang mata ay kumikibot.

Hindi ko na matandaan kung ano ang nasa isip ko, bukod sa pagsigaw ng "AAAAAAAAA" at kung anu-ano pa. Alas-4 noon ng umaga, at ginamit ang Docker source code upang maunawaan ang prinsipyo ng pag-hash ng mga layer ng imahe. Binuksan ang ikatlong lata ng energy drink. At sa huli ay napagtanto ko na ang pag-hash ay isinasaalang-alang lamang ang file, ang mga nilalaman nito, ngunit HINDI MGA KARAPATAN SA PAG-ACCESS! Ibig sabihin, sa ilang mahiwagang paraan nawala ang ating mga karapatan, hindi pinagana ang selinux, hindi ginagamit ang acl, at walang sticky bit.

Tinanggal ko ang lokal na imahe, tinanggal din ang imahe mula sa registry ng docker at itinulak ito muli. At lahat ay gumana. Ito ay lumiliko na sa panahon ng paglilipat ang mga karapatan ay nawala, kapwa sa loob ng lokal na imahe at sa loob ng imahe na nakahiga sa pagpapatala. Tulad ng nasabi ko na, sa maraming kadahilanan ay matatagpuan ito sa parehong kotse. At bilang isang resulta, sa isang direktoryo /var/lib/docker.

At inaasahan ang tanong kung sinubukan nilang ibalik ang tingin ng docker sa lumang direktoryo - hindi, hindi nila sinubukan, sayang, hindi pinapayagan ito ng mga pangyayari. Oo, at talagang gusto kong malaman ito.

Matapos isulat ang artikulong ito, ang solusyon sa problema ay tila halata sa akin, ngunit sa oras ng pagsusuri ay tila hindi. Sa totoo lang, nag-Google ako at wala akong nakitang mga katulad na sitwasyon.

Resulta: Nalutas ko ang problema, hindi ko pa rin maintindihan ang dahilan =(

Kung may nakakaalam, nahuhulaan, nagkaroon ng pangitain tungkol sa mga posibleng sanhi ng problemang ito, lubos akong natutuwa na marinig mula sa iyo sa mga komento!

Pinagmulan: www.habr.com

Magdagdag ng komento