ڊاکر اسٽوريج لڏپلاڻ واري مسئلي جي تاريخ (ڊاڪر روٽ)

ڪجھ ڏينهن اڳ کان وڌيڪ نه، اهو فيصلو ڪيو ويو ته هڪ سرور تي ڊڪر اسٽوريج (ڊائريڪٽري جتي ڊاکر سڀني ڪنٽينر ۽ تصويري فائلن کي محفوظ ڪري ٿو) کي هڪ الڳ سيڪشن ڏانهن منتقل ڪيو وڃي.
وڌيڪ صلاحيت هئي. ڪم معمولي لڳي رهيو هو ۽ مصيبت جي اڳڪٿي نه ڪئي ...

شروع ڪرڻ:

1. اسان جي ايپليڪيشن جي سڀني ڪنٽينرز کي روڪيو ۽ ماريو:

docker-compose down

جيڪڏهن اتي ڪيترائي ڪنٽينر آهن ۽ اهي مختلف ٺهيل آهن، توهان اهو ڪري سگهو ٿا:

docker rm -f $(docker ps -q)

2. ڊڪر ڊيمن کي روڪيو:

systemctl stop docker

3. ڊاريڪٽري کي گهربل جڳھ ڏانھن منتقل ڪريو:

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

4. اسان ڊاڪر ڊيمن کي نئين ڊاريڪٽري ۾ ڏسڻ لاء چيو. اتي ڪيترائي اختيار آھن: يا ته ڊيمن کي نئين رستي ڏانھن اشارو ڪرڻ لاءِ -g پرچم استعمال ڪريو، يا systemd configs، جيڪو اسان استعمال ڪيو آھي. يا هڪ symlink. مان ان بابت وڌيڪ تفصيل ۾ نه ويندس، اهو انٽرنيٽ تي آهي. پورو ڊاکر روٽ کي نئين جڳهه تي منتقل ڪرڻ تي دستياب.

5. ڊاکر ڊيمن کي شروع ڪريو ۽ پڪ ڪريو ته اهو صحيح جڳهه تي نظر اچي ٿو:

systemctl status docker

ھڪڙي آئوٽ لائين ۾ اسان کي ڏسڻ گھرجي:

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

اسان پڪ ڪيو ته اختيار کي ڊيمن ڏانهن منتقل ڪيو ويو، هاڻي اچو ته چيڪ ڪريو ته ڇا ان کي لاڳو ڪيو ويو آهي (شڪر inkvizitor68sl)!

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

6. اچو ته اسان جي ايپليڪيشن کي شروع ڪريون:

docker-compose up -d

7. چيڪ ڪريو

۽ هتي مزو شروع ٿئي ٿو، DBMS، MQ، سڀ ڪجهه ٺيڪ آهي! ڊيٽابيس برقرار آهي، هر شي ڪم ڪري ٿي ... سواء nginx جي. اسان وٽ اسان جي پنهنجي نينڪس تعمير آهي ڪربروس ۽ درٻارن سان. ۽ ڪنٽينر لاگز کي ڏسڻ ۾ اشارو ڪيو ويو ته اهو /var/tmp ڏانهن نه ٿو لکي سگهي - اجازت رد ڪئي وئي. مان پنهنجين آڱرين سان پنهنجا مندر گونجي ٿو ۽ صورتحال جو تجزيو ڪرڻ جي ڪوشش ڪريان ٿو... اهو ڪيئن ممڪن آهي؟ Docker تصوير تبديل نه ڪيو. اسان صرف ڊاريڪٽري کي منتقل ڪيو. اهو هميشه ڪم ڪندو رهيو، ۽ هتي اهو توهان لاءِ آهي... تجربي خاطر، مان پنهنجي هٿن سان ڪنٽينر ۾ ويس ۽ هن ڊاريڪٽري جا حق تبديل ڪيا، اتي موجود هئا. روٽ، روٽ 755، ڏنو روٽ، روٽ 777. ۽ سڀ ڪجهه شروع ٿي ويو... هڪ خيال منهنجي ذهن ۾ آواز ڪرڻ لڳو - ڪجهه قسم جي بکواس ... مون سوچيو، خير، شايد مون ڪجهه حساب ۾ نه ورتو آهي ...

مون فيصلو ڪيو ته اسان منتقلي دوران فائلن تائين رسائي جي حقن سان پيار ۾ پئجي ويا. اسان ايپليڪيشن کي روڪيو، ڊڪر ڊيمون، نئين ڊاريڪٽري کي ختم ڪيو ۽ نقل ڪيو /var/lib/docker ڊاريڪٽري استعمال ڪندي rsync -a.

منهنجو خيال آهي ته هاڻي سڀ ڪجهه ٺيڪ آهي، اچو ته ڊاڪر ايپليڪيشن کي وڌايو.

اڙي... مسئلو رهيو... منهنجون اکيون ڦاٽي ويون. مان پنھنجي ورچوئل مشين جي ڪنسول ڏانھن ھليو ويس، جتي مون مختلف ٽيسٽون ڪيون، مون وٽ ھي nginx تصوير ھئي، ۽ مان ڪنٽينر جي اندر چڙھي ويس، ۽ ھتي /var/tmp ڊاريڪٽري جا حق آھن روٽ، روٽ 777. يعني. جيئن مون کي دستي طور تي سيٽ ڪرڻو پيو. پر تصويرون هڪجهڙا آهن!

xfs فائل سسٽم هر جڳهه استعمال ڪيو ويو.

مون ڪمانڊ استعمال ڪندي مقابلو ڪيو

docker inspect my-nginx:12345

سڀئي هيش هڪجهڙا آهن، سڀ هڪ کان هڪ. ٻئي سرور تي ۽ منهنجي ورچوئل مشين تي. مون مقامي nginx تصوير کي ڊاهي ڇڏيو ۽ ان کي ٻيهر رجسٽري مان ڪڍيو، جيڪو ڪيترن ئي سببن لاء ساڳئي مشين تي آهي. ۽ مسئلو ساڳيو ئي آهي... هاڻي منهنجي ٻي اک ٽڙي رهي آهي.

مون کي هاڻي ياد نه آهي ته منهنجي ذهن ۾ ڪهڙا خيال هئا، ان کان علاوه “AAAAAAAA” ۽ ٻيون شيون. اهو صبح جو 4 وڳي هو، ۽ ڊڪر جو سورس ڪوڊ استعمال ڪيو ويو هو هيشنگ تصويري پرت جي اصول کي سمجهڻ لاءِ. انرجي مشروب جو ٽيون ڪئن کوليو. ۽ آخر ۾ اهو مون تي اڀريو ته هيشنگ صرف فائل، ان جي مواد، پر اڪائونٽ ۾ وٺندو آهي حقن جي رسائي نه ڪريو! اهو آهي، ڪنهن پراسرار طريقي سان اسان جا حق گم ٿي ويا آهن، selinux غير فعال آهي، acl استعمال نه ڪيو ويو آهي، ۽ ڪو به چپچپا بٽ ناهي.

مون مقامي تصوير کي ڊاهي ڇڏيو، ڊاکر رجسٽري مان تصوير کي پڻ ڊاهي ڇڏيو ۽ ان کي ٻيهر ڌڪايو. ۽ سڀ ڪم ڪيو. اهو ظاهر ٿئي ٿو ته منتقلي دوران حق گم ٿي ويا آهن، ٻئي مقامي تصوير جي اندر ۽ اندر اندر اندر اندر رجسٽري ۾ بيٺل تصوير. جيئن ته مون اڳ ۾ ئي چيو آهي، ڪيترن ئي سببن لاء اهو هڪ ئي ڪار تي واقع هو. ۽ نتيجي طور، ھڪڙي ڊاريڪٽري ۾ /var/lib/docker.

۽ سوال جي توقع ڪندي ته ڇا انهن ڊڪر جي نظر کي پراڻي ڊاريڪٽري ڏانهن موٽڻ جي ڪوشش ڪئي - نه، انهن ڪوشش نه ڪئي، افسوس، حالتن ان جي اجازت نه ڏني. ها، ۽ مان واقعي ان کي سمجهڻ چاهيان ٿو.

هي مضمون لکڻ کان پوءِ، مون کي مسئلي جو حل واضح نظر اچي ٿو، پر تجزيي جي وقت ۾ ائين نه ٿيو. ايمانداري سان، مون گوگل ڪيو ۽ ساڳئي حالتون نه مليون.

نتيجو: مون مسئلو حل ڪيو، مان اڃا تائين سبب نه سمجهي سگهيو آهيان =(

جيڪڏهن ڪو ڄاڻي ٿو، اندازو لڳايو، هن مسئلي جي ممڪن سببن جي باري ۾ هڪ خواب هو، مون کي تبصرن ۾ توهان کان ٻڌي ڏاڍي خوشي ٿي ويندي!

جو ذريعو: www.habr.com

تبصرو شامل ڪريو