[{"data":1,"prerenderedAt":178},["ShallowReactive",2],{"seo-verification":3,"blog-اذونات-مجلدات-docker-vps-ar":6},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-اذونات-مجلدات-docker-vps-ar",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":27,"featuredImage":29,"bgImage":30,"posterImage":31,"relatedSolution":29,"intro":32,"sections":33,"ctaTitle":135,"ctaBody":136,"ctaButton":137,"ctaUrl":138,"relatedPosts":139},395,"اذونات-مجلدات-docker-vps",{"fr":12,"en":13,"ar":10,"es":14},"docker-volume-permissions-self-hosted-vps","docker-volume-permissions-vps","permisos-volumenes-docker-vps","أذونات مجلدات Docker: الإصلاح في 3 أوامر","خطأ Permission denied في سجلات Docker؟ افهم آلية UID\u002FGID وأصلح أذونات المجلدات دون الحاجة إلى صلاحيات root.",10,0,false,"2026-09-28T00:00:00+00:00","2026-09-29T14:40:42+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":25},3,"النشر","deploiement","bg-success\u002F10 text-success",[28],{"id":23,"name":24,"slug":25,"color":26,"icon":25},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fdocker-volume-permissions-self-hosted-vps-poster.svg","التطبيق يعمل، الحاوية تشتغل، لكن السجلات تُظهر ‏`Permission denied`‏ ولا يُحفظ أي شيء. هذه المشكلة تصيب تقريباً كل التطبيقات المُستضافة ذاتياً عند تثبيت مجلد من المضيف داخل ‏Docker‏. السبب دائماً واحد: معرّف المستخدم ‏(UID)‏ الذي يعمل داخل الحاوية لا يتطابق مع مالك المجلد على المضيف. يشرح هذا الدليل الآلية ويقدّم أوامر التشخيص والإصلاح المناسب لكل حالة — دون تشغيل الحاويات بصلاحيات ‏root‏ أبداً.",[34,38,41,49,52,70,73,90,93,96,120,123,129,132],{"type":35,"title":36,"body":37},"h2","الآلية: لماذا يرفض Docker الكتابة","‏Docker‏ يشارك نواة ‏Linux‏ للمضيف. عند تثبيت مجلد من المضيف ‏(bind-mount)‏، يطبّق نظام الملفات قواعد أذونات ‏POSIX‏ نفسها. ملف يملكه ‏UID 1000‏ على المضيف يبقى تحت ملكية ‏UID 1000‏ بغض النظر عن الاسم — سواء كان ‏`alice`‏ على المضيف أو ‏`paperless`‏ داخل الحاوية. إذا كانت العملية في الحاوية تعمل بـ‏UID 472‏ والمجلد يملكه ‏root (UID 0)‏، تُرفض الكتابة — حتى لو استخدمت ‏`chmod 755`‏.\n\nالفخ الكلاسيكي: تُنشئ المجلد بجلسة ‏SSH‏ الخاصة بك ‏(UID 1000)‏، ثم تُشغّل حاوية ‏Grafana‏ التي تعمل بـ‏UID 472‏. يحاول ‏Grafana‏ الكتابة في ‏`\u002Fvar\u002Flib\u002Fgrafana`‏ المُثبَّت من ‏`\u002Fopt\u002Fgrafana\u002Fdata`‏ — الذي يملكه مستخدم ‏SSH‏. النتيجة: ‏`GF_PATHS_DATA='\u002Fvar\u002Flib\u002Fgrafana' is not writable.`",{"type":35,"title":39,"body":40},"التطبيقات الأكثر تأثراً ومعرّفات المستخدم الخاصة بها","تؤثر مشكلات أذونات Docker بصورة رئيسية على التطبيقات التي تعمل بـUID محدد يختلف عن UID المضيف.",{"type":42,"items":43},"ul",[44,45,46,47,48],"‏**Paperless-ngx**‏ — ‏`UID 1000`‏ (المستخدم ‏`paperless`‏): يدير مجلدات ‏`consume`‏ و‏`export`‏ و‏`media`‏ و‏`data`","‏**Grafana**‏ — ‏`UID 472`‏ (المستخدم ‏`grafana`‏): يكتب قاعدة بيانات ‏SQLite‏ والإضافات في ‏`\u002Fvar\u002Flib\u002Fgrafana`","‏**Nextcloud**‏ (صورة ‏Debian‏) — ‏`UID 33`‏ (المستخدم ‏`www-data`‏): مجلد البيانات والإعدادات والسجلات","‏**Immich**‏ — ‏`UID 1000`‏ (المستخدم ‏`node`‏): مكتبة الصور والصور المصغّرة وقاعدة بيانات الذكاء الاصطناعي","‏**Gitea**‏ — ‏`UID 1000`‏ (المستخدم ‏`git`‏): المستودعات ومفاتيح ‏SSH‏ والسجلات وقاعدة بيانات ‏SQLite‏ الافتراضية",{"type":35,"title":50,"body":51},"التشخيص: تحديد المشكلة في أقل من دقيقتين","قبل الإصلاح، تأكد أن المشكلة فعلاً تخص الأذونات وحدد ‏UID‏ المعني. ثلاثة أوامر تكفي.",{"type":53,"steps":54},"steps",[55,58,61,64,67],{"title":56,"body":57},"قراءة رسالة الخطأ الدقيقة","راجع سجلات الحاوية المُشكِلة:\n```\ndocker logs \u003Cاسم-الحاوية> 2>&1 | grep -i 'permission\\|denied\\|cannot\\|mkdir'\n```\nرسالة ‏`permission denied`‏ أو ‏`cannot create directory`‏ تؤكد التشخيص.",{"title":59,"body":60},"تحديد UID العملية داخل الحاوية","```\ndocker exec \u003Cاسم-الحاوية> id\n```\nمثال على الناتج: ‏`uid=472(grafana) gid=0(root)`‏. لاحظ ‏UID‏ — هنا ‏`472`‏.",{"title":62,"body":63},"التحقق من مالك مجلد المضيف","```\nls -ln \u002Fopt\u002Fgrafana\u002Fdata\n```\nناتج ‏`drwxr-xr-x 2 0 0 ...`‏ يعني أن المجلد يملكه ‏root (UID 0)‏. ‏UID 472‏ لديه فقط صلاحيات «other» — القراءة والتنفيذ، لا الكتابة.",{"title":65,"body":66},"استخدام stat للتشخيص الكامل","```\nstat \u002Fopt\u002Fgrafana\u002Fdata\n```\nتحقق من سطري ‏`Uid:`‏ و‏`Gid:`‏. إذا أظهرا ‏`(0\u002Froot)`‏ بينما تعمل الحاوية بـ‏472‏، تأكدت المشكلة.",{"title":68,"body":69},"فحص إعدادات الحاوية","```\ndocker inspect \u003Cاسم-الحاوية> | grep -A5 'Mounts'\n```\nيسرد هذا الأمر كل ‏bind-mounts‏ والمجلدات المُسمّاة النشطة.",{"type":35,"title":71,"body":72},"الإصلاح حالة بحالة: chown على مجلد المضيف","الإصلاح الأساسي هو ‏`chown`‏ على مجلد المضيف نحو ‏UID‏ الذي تتوقعه الحاوية. إليك الأوامر للتطبيقات الأكثر شيوعاً.",{"type":53,"steps":74},[75,78,81,84,87],{"title":76,"body":77},"‏Grafana‏ (UID 472)","```\nmkdir -p \u002Fopt\u002Fgrafana\u002Fdata\nchown -R 472:472 \u002Fopt\u002Fgrafana\u002Fdata\n```\nفي ‏`compose.yml`‏ الخاص بك:\n```yaml\nvolumes:\n  - \u002Fopt\u002Fgrafana\u002Fdata:\u002Fvar\u002Flib\u002Fgrafana\n```",{"title":79,"body":80},"‏Nextcloud‏ (UID 33، صورة Debian)","```\nmkdir -p \u002Fopt\u002Fnextcloud\u002F{data,config,apps}\nchown -R 33:33 \u002Fopt\u002Fnextcloud\u002Fdata\nchown -R 33:33 \u002Fopt\u002Fnextcloud\u002Fconfig\n```\nتنبيه: صورة ‏Alpine‏ تستخدم ‏UID 82‏. تحقق بـ‏`docker exec \u003Cحاوية> id www-data`‏ إذا لم تكن متأكداً.",{"title":82,"body":83},"‏Paperless-ngx‏ (UID 1000)","```\nmkdir -p \u002Fopt\u002Fpaperless\u002F{consume,export,media,data}\nchown -R 1000:1000 \u002Fopt\u002Fpaperless\u002Fconsume\nchown -R 1000:1000 \u002Fopt\u002Fpaperless\u002Fexport\nchown -R 1000:1000 \u002Fopt\u002Fpaperless\u002Fmedia\nchown -R 1000:1000 \u002Fopt\u002Fpaperless\u002Fdata\n```",{"title":85,"body":86},"‏Immich‏ (UID 1000)","```\nmkdir -p \u002Fopt\u002Fimmich\u002F{library,thumbnails,encoded-video,profile}\nchown -R 1000:1000 \u002Fopt\u002Fimmich\n```\nتنبيه: متغيرات البيئة ‏`PUID`\u002F`PGID`‏ لا تعمل مع صور ‏Immich‏ الرسمية.",{"title":88,"body":89},"التحقق بعد الإصلاح","```\nls -ln \u002Fopt\u002Fgrafana\u002Fdata\n```\nيجب أن يُظهر ‏`drwxr-xr-x 2 472 472 ...`‏. ثم أعد تشغيل الحاوية:\n```\ndocker compose restart grafana\ndocker logs grafana --tail 20\n```",{"type":35,"title":91,"body":92},"الأنواع المختلفة: bind-mounts والمجلدات المُسمّاة و user:","يعمل ‏`chown`‏ على مجلد المضيف لـ‏bind-mounts‏، لكن ‏Docker‏ يوفر مقاربات أخرى.\n\n**توجيه ‏`user:`‏ في ‏compose.yml‏.** بعض الصور مُصمَّمة لقبول ‏UID‏ اعتباطي عبر ‏`user:`‏. هذا يتجنب ‏`chown`‏ إذا كان مجلدك يملكه مستخدم المضيف:\n```yaml\nservices:\n  app:\n    image: my-image\n    user: \"1000:1000\"\n    volumes:\n      - \u002Fhome\u002Fuser\u002Fdata:\u002Fapp\u002Fdata\n```\nهذه المقاربة تعمل فقط إذا كانت الصورة لا تتطلب ملفات داخلية بـ‏UID‏ محدد.\n\n**المجلدات المُسمّاة في Docker.** مع مجلد ‏Docker‏ مُسمّى، يدير ‏Docker‏ المجلد تحت ‏`\u002Fvar\u002Flib\u002Fdocker\u002Fvolumes\u002F`‏. عند أول كتابة، يُنشأ المجلد بأذونات عملية الحاوية — لا مشاكل أذونات عند بدء التشغيل، لكن ترحيل البيانات الموجودة يتطلب خطوة نسخ صريحة.",{"type":35,"title":94,"body":95},"حالات NFS والتثبيتات البعيدة","تُضيف تثبيتات ‏NFS‏ طبقة تعقيد: يطبّق خادم ‏NFS‏ قواعد ‏UID‏ الخاصة به. إذا كان الخادم يُصدِّر مع ‏`root_squash`‏ (الافتراضي)، يُخفَّض وصول ‏root‏ من العميل إلى ‏`nobody`‏.\n\nالحلول:\n1. ضبط تصدير ‏NFS‏ بـ‏`all_squash,anonuid=472,anongid=472`‏ لـ‏Grafana‏.\n2. استخدام ‏`no_root_squash`‏ فقط إذا كنت تتحكم كلياً في الشبكة (خطر أمني).\n3. لـ‏CIFS\u002FSMB‏، مرّر ‏`uid=33,gid=33`‏ في خيارات التثبيت لـ‏Nextcloud‏.\n\nفي ‏`\u002Fetc\u002Ffstab`‏:\n```\n\u002F\u002Fserver\u002Fshare \u002Fopt\u002Fnextcloud\u002Fdata cifs uid=33,gid=33,credentials=\u002Fetc\u002Fcifs-creds,iocharset=utf8 0 0\n```",{"type":97,"title":98,"headers":99,"rows":103},"comparison","مقارنة طرق الإصلاح",[100,101,102],"الطريقة","المزايا","المخاطر \u002F القيود",[104,108,112,116],[105,106,107],"chown UID:GID على مجلد المضيف","بسيطة وعالمية ومتوافقة مع جميع الصور","يجب معرفة UID الدقيق؛ تحتاج إعادة التطبيق عند إعادة إنشاء المجلد",[109,110,111],"user: UID:GID في compose.yml","لا حاجة لـ chown؛ قابل للنقل بين المضيفين","الصورة يجب أن تدعم UIDs اعتباطية؛ قد يكسر الملفات الداخلية",[113,114,115],"المجلدات المُسمّاة في Docker","تُدار الأذونات تلقائياً عند أول تشغيل","أقل شفافية؛ ترحيل البيانات الموجودة أكثر تعقيداً",[117,118,119],"--privileged أو chmod 777","يحل المشكلة فوراً","خطر: يكشف المضيف وجميع العمليات؛ لا تستخدم أبداً في الإنتاج",{"type":35,"title":121,"body":122},"استكشاف الأخطاء: 4 أخطاء كلاسيكية مع رسائلها الدقيقة","إليك أكثر أربعة أخطاء Docker شيوعاً المتعلقة بالأذونات، مع رسالة الخطأ الدقيقة وحلها.",{"type":42,"items":124},[125,126,127,128],"‏**`mkdir: cannot create directory '\u002Fvar\u002Flib\u002Fgrafana\u002Fplugins': Permission denied`**‏ ← مجلد المضيف لا يملكه ‏UID 472‏. طبّق ‏`chown -R 472:472 \u002Fopt\u002Fgrafana\u002Fdata`‏.","‏**`[Errno 13] Permission denied: '\u002Fusr\u002Fsrc\u002Fpaperless\u002Fmedia'`**‏ ← ‏Paperless-ngx‏ لا يمكنه الكتابة في مجلد ‏media‏. تحقق أن ‏bind-mount‏ يملكه ‏UID 1000‏ على المضيف.","‏**`Could not create lock file \u002Fvar\u002Flib\u002Fgrafana\u002F.~lock.grafana.db`**‏ ← ‏Grafana‏ يقرأ المجلد لكنه لا يستطيع الكتابة. مشكلة أذونات على الملفات الموجودة: احذف ملف القفل.","‏**`chown: changing ownership of '\u002Fdata': Operation not permitted`**‏ (عند بدء الحاوية) ← الصورة تحاول إصلاح الأذونات لكنها لا تعمل بـ‏root‏. نفّذ ‏`chown`‏ يدوياً على المضيف قبل تشغيل الحاوية.",{"type":130,"body":131},"tip","‏**SELinux‏ و‏AppArmor‏: العَلَمان ‏`:z`‏ و‏`:Z`‏ في ‏bind-mounts‏.** على الأنظمة ذات ‏SELinux‏ النشط (‏CentOS‏، ‏RHEL‏، ‏Fedora‏)، قد يُحظر ‏bind-mount‏ حتى لو كانت أذونات ‏POSIX‏ صحيحة. ‏Docker‏ يوفر لاحقتين: ‏`:z`‏ يُعيد تسمية المحتوى للمشاركة بين حاويات متعددة، و‏`:Z`‏ للوصول الخاص. مثال: ‏`- \u002Fopt\u002Fgrafana\u002Fdata:\u002Fvar\u002Flib\u002Fgrafana:z`‏. للتحقق: ‏`ausearch -m AVC -ts recent | grep docker`‏.",{"type":35,"title":133,"body":134},"الخلاصة","‏`Permission denied`‏ في سجلات ‏Docker‏ ليس قدراً محتوماً. الحل في ثلاثة أوامر: ‏`docker exec \u003Cحاوية> id`‏ لمعرفة ‏UID‏، ثم ‏`ls -ln \u003Cمجلد-المضيف>`‏ للتأكد من المالك الحالي، ثم ‏`chown -R \u003CUID>:\u003CGID> \u003Cمجلد-المضيف>`‏ للإصلاح. القاعدة الذهبية: أنشئ مجلدات المضيف بالمالك الصحيح قبل تشغيل الحاوية، لا بعدها.","VPS جاهز للاستضافة الذاتية","انشر تطبيقات Docker على VPS من ServOrbit مع وصول root وIPv4 مخصصة ولقطات تلقائية. ابتداءً من ‏99 درهم\u002Fشهر‏.","اكتشف عروض VPS","\u002Fvps-cloud",[140,162],{"id":141,"slug":142,"slugs":143,"title":147,"excerpt":148,"readTime":149,"views":150,"isPinned":19,"publishedAt":151,"updatedAt":152,"category":153,"categories":159,"featuredImage":29,"bgImage":30,"posterImage":161,"relatedSolution":29},369,"اسرار-docker-في-الانتاج-حماية-بيانات-الاعتماد-على-vps",{"fr":144,"en":145,"ar":142,"es":146},"docker-secrets-securite-vps-production","docker-secrets-production-protecting-credentials-on-vps","docker-secrets-produccion-proteger-credenciales-vps","أسرار Docker في الإنتاج: حماية بيانات الاعتماد على VPS","إدارة أسرار Docker في الإنتاج دون كشفها في ‎docker-compose.yml‎. Docker Secrets بدون Swarm و‎.env.vault‎ وSOPS: المنهج والمقارنة.",7,1,"2026-09-20T00:00:00+00:00","2026-09-20T21:13:51+00:00",{"id":154,"name":155,"slug":156,"color":157,"icon":158},8,"الأمان والمراقبة","securite-monitoring","bg-rose-500\u002F10 text-rose-400","security",[160],{"id":154,"name":155,"slug":156,"color":157,"icon":158},"\u002Fblog\u002Fcovers\u002Fdocker-secrets-securite-vps-production-poster.svg",{"id":163,"slug":164,"slugs":165,"title":169,"excerpt":170,"readTime":171,"views":18,"isPinned":19,"publishedAt":172,"updatedAt":173,"category":174,"categories":175,"featuredImage":29,"bgImage":30,"posterImage":177,"relatedSolution":29},229,"docker-compose-في-الإنتاج-قائمة-التحقق-من-10-نقاط",{"fr":166,"en":167,"ar":164,"es":168},"docker-compose-production-checklist","docker-compose-in-production-10-point-checklist","checklist-docker-compose-en-produccion","Docker Compose في الإنتاج: قائمة التحقق من 10 نقاط","‏قائمة تحقق Docker Compose للإنتاج: 10 إعدادات أساسية، فحوصات صحية، أسرار بدون توقف، استراتيجية التراجع، استكشاف الأخطاء الشائعة.",12,"2026-08-06T00:00:00+00:00","2026-09-29T14:40:45+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":25},[176],{"id":23,"name":24,"slug":25,"color":26,"icon":25},"\u002Fblog\u002Fcovers\u002Fdocker-compose-production-checklist-poster.svg",1790693136325]