والیومز: کنٹینر ڈیٹا اصل میں کہاں رہتا ہے
نامزد والیوم اور بائنڈ ماؤنٹ میں کیا فرق ہے، یہ سب ڈسک پر جسمانی طور پر کہاں رہتا ہے، اور کنٹینر دوبارہ بناتے وقت ڈیٹا بیس کو کیسے نہ کھویا جائے۔
اپ ڈیٹ 23 اگست، 2026
کنٹینر ڈسپوزایبل ہوتا ہے۔ اس کے اندر لکھی گئی ہر چیز اس کے ساتھ غائب ہو جاتی ہے۔ ڈیٹا کو باہر رہنا چاہیے، اور اس کے بالکل دو طریقے ہیں: ایک نامزد والیوم اور ہوسٹ ڈائریکٹری بِائنڈ ماؤنٹ۔
دو طریقے اور ہر ایک کب استعمال کریں
services:
db:
image: postgres:17
volumes:
- db-data:/var/lib/postgresql/data # named volume
app:
image: nginx:1.27
volumes:
- ./site:/usr/share/nginx/html:ro # directory bind mount
- ./nginx.conf:/etc/nginx/nginx.conf:ro
volumes:
db-data:
نامزد والیوم خود Docker بناتا اور محفوظ کرتا ہے، /var/lib/docker/volumes/<name>/_data میں۔ اندر کی اجازتیں امیج خودکار طور پر سیٹ کرتا ہے۔ ڈیٹا بیس اور اندرونی سروس اسٹیٹ اسی طرح رکھی جاتی ہے۔
ڈائریکٹری بِائنڈ ماؤنٹ مشین کی ڈسک پر ایک عام پاتھ ہوتا ہے۔ اسی طرح آپ کنفیگریشن فائلیں، ویب سائٹ کے اسٹیٹک اثاثے اور سرٹیفکیٹس فراہم کرتے ہیں: انہیں ایڈیٹر میں ایڈٹ کرنا اور ریپوزٹری میں محفوظ کرنا آسان ہوتا ہے۔
:ro فلیگ ماؤنٹ کو صرف پڑھنے کے قابل بناتا ہے۔ اسے ہر وہاں استعمال کریں جہاں کنٹینر کو لکھنے کی رسائی درکار نہ ہو — یہ سستی حفاظت ہے۔
ہر چیز جسمانی طور پر کہاں محفوظ ہوتی ہے
docker volume ls
docker volume inspect db-data
docker inspect -f '{{json .Mounts}}' <container> | python3 -m json.tool
sudo du -sh /var/lib/docker/volumes/* | sort -h | tail
ڈسک اسپیس ختم ہونے پر سب سے پہلے آخری کمانڈ چلائیں۔ مزید تفصیل: disk space۔
docker compose down -vاورdocker volume pruneوالیومز کو مستقل طور پر حذف کر دیتے ہیں۔ ڈیٹا بیس والا والیوم کنٹینر کے بند ہونے پر ”غیر استعمال شدہ“ لگتا ہے اور صفائی کی زد میں آ جاتا ہے۔ صفائی سے پہلے فہرست دیکھیں:docker volume ls -f dangling=true۔
کاپی کرنا اور منتقلی
ڈسپوزایبل کنٹینر کے ذریعے نامزد والیوم کاپی کرنا:
docker run --rm -v db-data:/from -v $(pwd):/to alpine \
tar czf /to/db-data.tar.gz -C /from .
بحال کرنا:
docker volume create db-data
docker run --rm -v db-data:/to -v $(pwd):/from alpine \
tar xzf /from/db-data.tar.gz -C /to
ڈیٹا بیس کے لیے یہ طریقہ صرف اسی وقت موزوں ہے جب کنٹینر بند ہو: چلتے ڈیٹا بیس کی فائل لیول کاپی متضاد ہو سکتی ہے۔ بہتر ہے کہ ڈیٹا بیس کے اپنے ٹولز — pg_dump، mysqldump — سے ڈمپ بنائیں۔ دیکھیں what exactly to copy۔
اجازتیں
بِائنڈ ماؤنٹس کے ساتھ سب سے عام غلطی مالک کا میل نہ کھانا ہے۔ کنٹینر کے اندر پروسیس اپنے UID کے تحت چلتا ہے، اور ہوسٹ کی طرف سے root کے طور پر بنائی گئی فائل اس کے لیے ناقابل رسائی ہوتی ہے۔
docker compose exec app id
sudo chown -R 1000:1000 ./data
بہت سے امیج PUID/PGID ویری ایبلز قبول کرتے ہیں — یہ ڈائریکٹری کا مالک بدلنے سے زیادہ آسان ہے۔
عام غلطیاں
- ڈیٹا کنٹینر کے اندر لکھا گیا۔ اپ ڈیٹ کے دوران آپ نے کنٹینر دوبارہ بنایا — ڈیٹا غائب ہو گیا۔ جانچیں:
docker diff <container>دکھائے گا کہ اس کے فائل سسٹم میں کیا بدلا؛ وہاں بڑی تحریر ایک انتباہی علامت ہے۔ - آپ نے امیج میں موجود غیر خالی پاتھ پر ڈائریکٹری بِائنڈ ماؤنٹ کر دی۔ امیج کا مواد چھپ جاتا ہے، اور سروس اپنی فائلیں نہیں ڈھونڈ پاتی۔
- بِائنڈ ماؤنٹ میں نسبتی پاتھ۔ یہ موجودہ ڈائریکٹری سے نہیں، بلکہ
compose.yamlوالی ڈائریکٹری سے حل ہوتا ہے۔ کسی اور جگہ سے چلانے پر نئی خالی ڈائریکٹری بن جائے گی۔ - آپریٹنگ سسٹم دوبارہ انسٹال کرتے وقت والیومز بھول گئے۔ دوبارہ انسٹالیشن ڈسک مکمل طور پر مٹا دیتی ہے۔ کاپی not on this machine محفوظ ہونی چاہیے۔