ڈاکر اسٹوریج کی منتقلی کے مسئلے کی تاریخ (ڈاکر روٹ)

کچھ دن پہلے، یہ فیصلہ کیا گیا تھا کہ ایک سرور پر ڈوکر اسٹوریج (وہ ڈائرکٹری جہاں ڈوکر تمام کنٹینر اور امیج فائلز کو اسٹور کرتا ہے) کو ایک الگ سیکشن میں منتقل کیا جائے، جو
زیادہ صلاحیت تھی. یہ کام معمولی لگ رہا تھا اور پریشانی کی پیش گوئی نہیں کی تھی...

آو شروع کریں:

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 پرچم کا استعمال کریں، یا سسٹمڈ کنفیگس، جسے ہم استعمال کرتے ہیں۔ یا ایک سملنک۔ میں اس بارے میں زیادہ تفصیل میں نہیں جاؤں گا، یہ انٹرنیٹ پر ہے۔ مکمل ڈوکر روٹ کو ایک نئے مقام پر منتقل کرنے سے متعلق دستورالعمل۔

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 کے۔ ہمارے پاس Kerberos اور درباریوں کے ساتھ ہماری اپنی nginx تعمیر ہے۔ اور کنٹینر لاگز کو دیکھنے سے اشارہ ہوا کہ یہ /var/tmp پر نہیں لکھ سکتا - اجازت سے انکار کر دیا گیا۔ میں اپنی انگلیوں سے اپنے مندروں کو گوندھتا ہوں اور حالات کا تجزیہ کرنے کی کوشش کرتا ہوں... یہ کیسے ممکن ہے؟ ڈاکر کی تصویر تبدیل نہیں ہوئی۔ ہم نے ابھی ڈائریکٹری منتقل کی ہے۔ یہ ہمیشہ کام کرتا ہے، اور یہ آپ کے لیے ہے... تجربے کی خاطر، میں اپنے ہاتھوں سے کنٹینر میں گیا اور اس ڈائریکٹری کے حقوق کو تبدیل کر دیا، وہاں موجود تھے۔ جڑ، جڑ 755، دیا جڑ، جڑ 777. اور سب کچھ شروع ہو گیا... میرے دماغ میں ایک خیال گونجنے لگا - ایک قسم کی بکواس... میں نے سوچا، ٹھیک ہے، شاید میں نے کسی چیز کا خیال نہیں رکھا...

میں نے فیصلہ کیا کہ ہمیں منتقلی کے دوران فائلوں تک رسائی کے حقوق سے پیار ہو گیا ہے۔ ہم نے ایپلیکیشن کو روک دیا، ڈوکر ڈیمون، نئی ڈائرکٹری کو ڈیلیٹ کیا اور /var/lib/docker ڈائرکٹری کا استعمال کرتے ہوئے کاپی کیا۔ rsync -a.

میرے خیال میں اب سب کچھ ٹھیک ہے، آئیے ڈوکر ایپلی کیشن کو اٹھاتے ہیں۔

آں... مسئلہ رہا... میری آنکھ پھڑک گئی۔ میں اپنی ورچوئل مشین کے کنسول پر پہنچا، جہاں میں مختلف ٹیسٹ چلاتا ہوں، میرے پاس یہ nginx امیج تھی، اور میں کنٹینر کے اندر چڑھ گیا، اور یہاں /var/tmp ڈائریکٹری کے حقوق ہیں روٹ، روٹ 777۔ یعنی جیسا کہ مجھے دستی طور پر سیٹ کرنا پڑا۔ لیکن تصاویر ایک جیسی ہیں!

xfs فائل سسٹم ہر جگہ استعمال ہوتا تھا۔

میں نے کمانڈ کا استعمال کرتے ہوئے موازنہ کیا۔

docker inspect my-nginx:12345

تمام ہیش ایک جیسی ہیں، سبھی ایک سے ایک ہیں۔ سرور اور میری ورچوئل مشین دونوں پر۔ میں نے مقامی nginx امیج کو ڈیلیٹ کیا اور اسے دوبارہ رجسٹری سے کھینچ لیا، جو کئی وجوہات کی بنا پر ایک ہی مشین پر ہے۔ اور مسئلہ وہی ہے... اب میری دوسری آنکھ پھڑک رہی ہے۔

مجھے اب یاد نہیں ہے کہ میرے دماغ میں کیا خیالات تھے، اس کے علاوہ "AAAAAAAAA" اور دوسری چیزیں۔ صبح کے 4 بج رہے تھے، اور تصویری پرتوں کو ہیش کرنے کے اصول کو سمجھنے کے لیے Docker سورس کوڈ استعمال کیا گیا۔ انرجی ڈرنک کا تیسرا کین کھولا۔ اور آخر میں یہ بات مجھ پر آ گئی کہ ہیشنگ صرف فائل، اس کے مواد کو مدنظر رکھتی ہے، لیکن حقوق تک رسائی نہیں! یعنی، کسی پراسرار طریقے سے ہمارے حقوق ختم ہو گئے ہیں، selinux غیر فعال ہے، acl استعمال نہیں کیا گیا ہے، اور کوئی چپچپا سا نہیں ہے۔

میں نے مقامی تصویر کو حذف کر دیا، تصویر کو ڈاکر رجسٹری سے بھی حذف کر دیا اور اسے دوبارہ دھکیل دیا۔ اور سب کچھ کام کیا. یہ پتہ چلتا ہے کہ منتقلی کے دوران مقامی تصویر کے اندر اور رجسٹری میں پڑی تصویر کے اندر دونوں حقوق ضائع ہو گئے تھے۔ جیسا کہ میں نے پہلے ہی کہا، کئی وجوہات کی بناء پر یہ ایک ہی کار پر واقع تھا۔ اور نتیجے کے طور پر، ایک ڈائریکٹری میں /var/lib/docker.

اور اس سوال کی توقع کرتے ہوئے کہ کیا انہوں نے پرانی ڈائرکٹری پر ڈاکر کی نگاہیں واپس کرنے کی کوشش کی ہے - نہیں، انہوں نے کوشش نہیں کی، افسوس، حالات نے اس کی اجازت نہیں دی۔ ہاں، اور میں واقعی اس کا پتہ لگانا چاہتا تھا۔

اس مضمون کو لکھنے کے بعد مجھے مسئلہ کا حل واضح نظر آتا ہے لیکن تجزیہ کے وقت ایسا نہیں لگتا تھا۔ سچ میں، میں نے گوگل کیا اور مجھے اس طرح کے حالات نہیں ملے۔

نتیجہ: میں نے مسئلہ حل کر دیا، مجھے اب بھی وجہ سمجھ نہیں آئی =(

اگر کوئی جانتا ہے، اندازہ لگاتا ہے، اس مسئلے کی ممکنہ وجوہات کے بارے میں ایک نقطہ نظر رکھتا ہے، مجھے تبصرے میں آپ سے سن کر بہت خوشی ہوگی!

ماخذ: www.habr.com

نیا تبصرہ شامل کریں