[{"data":1,"prerenderedAt":197},["ShallowReactive",2],{"seo-verification":3,"blog-docker-v29-على-vps-الهجرة-دون-كسر-المكدسات-ma-ar":6,"promo-bar-likely":167},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-docker-v29-على-vps-الهجرة-دون-كسر-المكدسات-ma-ar",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"noindex":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":27,"featuredImage":29,"bgImage":30,"posterImage":31,"relatedSolution":29,"intro":32,"sections":33,"ctaTitle":137,"ctaBody":138,"ctaButton":139,"ctaUrl":140,"relatedPosts":141},247,"docker-v29-على-vps-الهجرة-دون-كسر-المكدسات",{"fr":12,"en":13,"ar":10,"es":14},"docker-v29-migration-vps-breaking-changes","docker-v29-on-vps-migrate-without-breaking-your-stacks","docker-v29-en-vps-migrar-sin-romper-stacks","Docker v29 على VPS: الهجرة دون كسر المكدسات","Docker Engine v29 يُغيّر الحد الأدنى لـ API وخلفية الشبكة ومخزن الصور. دليل الهجرة للوكالات التي تدير أسطول VPS لعملائها.",12,1,false,"2026-08-12T00:00:00+00:00","2026-09-07T11:26:10+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-v29-migration-vps-breaking-changes-poster.svg","أصدرت Docker نسخة Engine v29 في مارس 2026، وقد غيّرت ثلاثة أسس في آنٍ واحد: الحد الأدنى لإصدار API، وخلفية الشبكة ‏(nftables)‏، ومخزن صور containerd. يتعطّل الخادم الافتراضي غير المُعدّ بصمت عند استقبال هذا التحديث — إذ يتوقف `docker-compose` v1 المستقل عن العمل، ولا يعود Dockge يبدأ، وتختفي قواعد iptables التي كانت مكدّساتك تعتمد عليها. يُمكّنك هذا الدليل من اكتشاف ما تعطّل، والهجرة بشكل نظيف، ومنع `apt upgrade` التالي من أن يتحوّل إلى حادثة في الساعة الثانية صباحاً.",[34,38,49,52,62,71,80,89,109,113,116,134],{"type":35,"title":36,"body":37},"h2","لماذا يكسر Docker v29 المكدسات الحالية — ولماذا الآن","تقع وكالة تُدير أسطول VPS لعملائها في موقف صعب: التحديث الخارجي (Docker أو Ubuntu أو Debian) يصل من الخارج بصرف النظر عمّن يُدير الخادم. حين يتلقّى VPS العميل `apt upgrade` دون رقابة، تصل ثلاثة تغييرات كاسرة في آنٍ واحد.\n\n**الكسر الأول — الحد الأدنى لإصدار API.** يرفع Docker Engine v29 الحد الأدنى لإصدار API إلى `1.44`. تفشل العملاء التي تعمل بالنسخة المستقلة القديمة `docker-compose` v1 ‏(الملف `\u002Fusr\u002Flocal\u002Fbin\u002Fdocker-compose`)‏ فوراً: تعليماتها البرمجية مُترجَمة لإصدارات API أقدم، ويرفض daemon الاتصال برسالة عدم توافق.\n\n**الكسر الثاني — خلفية شبكة nftables.** يُفعّل Docker v29 nftables افتراضياً عوضاً عن iptables لإدارة قواعد جدار حماية شبكات Docker. لا ترى النصوص البرمجية الخارجية التي تفحص سلاسل iptables مباشرةً ‏(نصوص المراقبة، وجدران الحماية المُخصّصة، وبعض قواعد UFW)‏ قواعد Docker بعد الآن — ليس لأنها اختفت، بل لأنها تعيش الآن في nftables.\n\n**الكسر الثالث — مخزن صور containerd.** ينتقل خلفية تخزين الصور إلى مخزن containerd. وهو قيد التفعيل الاختياري منذ v29، وسيصبح الافتراضي في v30.\n\nالاعتراض الكلاسيكي — «عملاؤنا يُديرون VPS بأنفسهم» — لا يوفر حمايةً. يأتي الكسر من الخارج، والوكالة هي من يتصل بها العميل حين يتوقف موقعه.",{"type":39,"title":40,"items":41},"ul","ما يُمكّنك هذا الدليل من فعله",[42,43,44,45,46,47,48],"**اكتشاف التوتر في إصدار API** بين عميل `docker` الخاص بك و‏daemon‏ VPS، قبل أن تُنتج الأوامر التالية خطأً غامضاً.","**تحديد في 30 ثانية** ما إذا كان VPS يعمل بـ `docker-compose` v1 المستقل — الملف الثنائي المُهمَل منذ Docker Desktop 3.6 والمُزال من الحزم الرسمية.","**الهجرة إلى إضافة `docker compose` v2** بأمرَين محدَّدَين، ثم التحقق من عمل ملفات `docker-compose.yml` الحالية دون تغيير في البنية.","**فهم تأثير nftables** على مكدّساتك: ما يستمر في العمل ‏(شبكات Docker)‏، وما قد يتعطّل ‏(نصوصك التي تقرأ iptables)‏، وأمر التشخيص الحاسم.","**تفعيل أو تأجيل مخزن containerd** وفق جدول هجرتك، مع مفتاح الإعداد الدقيق وأمر التحقق.","**تقييم توافق** Dockge وPortainer وCasaOS App Store مع v29، لتجنّب اكتشاف عدم التوافق أثناء حادثة لدى العميل.","**تجهيز أسطول VPS العملاء** كي يكون `apt upgrade` التالي حدثاً مُخطَّطاً، لا طارئاً ليليّاً.",{"type":35,"title":50,"body":51},"المتطلبات قبل البدء","يُطبَّق هذا الدليل على أي VPS يعمل بـ Ubuntu 22.04\u002F24.04 أو Debian 11\u002F12 مع تثبيت Docker Engine من المستودعات الرسمية لـ Docker Inc. ‏(وليس حزمة `docker.io` التابعة للتوزيعة)‏. تحتاج إلى وصول SSH كمستخدم root أو sudo. لا يتطلب تشخيص المشكلات أي انقطاع في الخدمة؛ أما نقل إضافة compose فيستغرق ثوانٍ خلالها تكون أوامر `docker compose` غير متاحة. التقط لقطة VPS قبل تعديل `\u002Fetc\u002Fdocker\u002Fdaemon.json` إذا كنت ستُفعّل مخزن containerd.",{"type":53,"title":54,"steps":55},"steps","الخطوة 1 — تشخيص إصدار API",[56,59],{"title":57,"body":58},"التحقق من إصداري API للعميل و‏daemon","شغّل الأمرَين التاليَين على كل VPS تريد فحصه:\n\n```bash\ndocker version --format '{{.Client.APIVersion}}'\ndocker version --format '{{.Server.APIVersion}}'\n```\n\nإذا كان إصدار العميل أقل من `1.44` وكان daemon يعمل بـ v29، ستحصل على خطأ عند الأوامر التالية. العتبة `1.44` هي الحد الأدنى الذي يقبله Docker Engine v29: يفشل عميل مُترجَم لـ `1.43` أو أقدم بالخطأ `Error response from daemon: client version 1.43 is too old. Minimum supported API version is 1.44, please upgrade your client`.\n\nإذا أظهر السطران `1.44` أو أعلى، فعميلك متوافق. انتقل إلى الخطوة التالية.",{"title":60,"body":61},"الكشف عن وجود docker-compose v1 المستقل","أمر `docker-compose` بالشَرطة وأمر `docker compose` بدون شَرطة ليسا الشيء ذاته. v1 ملف ثنائي Python مستقل، أما v2 فإضافة Go مُدمَجة في واجهة Docker.\n\n```bash\nwhich docker-compose && docker-compose --version\n```\n\nإذا أعاد الأمر مساراً في `\u002Fusr\u002Flocal\u002Fbin\u002F` أو `\u002Fusr\u002Fbin\u002F` مع إصدار `1.x.x`، لديك الملف الثنائي المستقل المُهمَل.\n\n```bash\ndocker compose version\n```\n\nإذا أعاد هذا الأمر `Docker Compose version v2.x.x`، فإضافة v2 موجودة بالفعل.",{"type":53,"title":63,"steps":64},"الخطوة 2 — الهجرة من docker-compose v1 إلى إضافة v2",[65,68],{"title":66,"body":67},"إزالة الملف الثنائي v1 وتثبيت الإضافة","```bash\napt remove docker-compose\napt install docker-compose-plugin\n```\n\nعلى VPS يعمل بـ Debian أو Ubuntu ويستخدم المستودعات الرسمية لـ Docker Inc. ‏(`download.docker.com`)‏، تتوفر حزمة `docker-compose-plugin` بدون إعداد إضافي.\n\nللتحقق بعد الهجرة:\n\n```bash\ndocker compose version\n# Docker Compose version v2.36.0\n```",{"title":69,"body":70},"التحقق من توافق بنية ملفات Compose الحالية","الغالبية العظمى من ملفات `docker-compose.yml` المكتوبة لـ v1 تعمل دون تعديل مع إضافة v2. التحقق من ملفاتك:\n\n```bash\ndocker compose config\n```\n\nيُحلّ هذا الأمر متغيرات البيئة ويُتحقق من البنية ويعرض الإعداد المُحلَّل. إخراج بلا أخطاء يعني أن ملفك متوافق.\n\nإذا كانت فريقك يستخدم نصوص shell تحتوي `docker-compose` بالشَرطة، أضف اختصاراً في `\u002Fetc\u002Fbash.bashrc` على VPS:\n\n```bash\nalias docker-compose='docker compose'\n```",{"type":53,"title":72,"steps":73},"الخطوة 3 — فهم تغيير خلفية الشبكة nftables والتكيّف معه",[74,77],{"title":75,"body":76},"التحقق من أن شبكات Docker لا تزال تعمل","البشرى السارة: `docker network` يعمل بشكل صحيح مع nftables. يستمر مرور حركة البيانات بين الحاويات، وترجمة عناوين الشبكة ‏(NAT)‏، وكشف المنافذ في العمل. ما يتغيّر هو الأداة الأساسية التي تكتب القواعد.\n\n```bash\ndocker network ls\n```\n\nشبكات bridge الحالية لا تزال مُدرَجة. للتحقق من أن حاوية تستقبل حركة البيانات على المنفذ المتوقع:\n\n```bash\ncurl -s http:\u002F\u002Flocalhost:8080\u002Fhealth\n```",{"title":78,"body":79},"تشخيص التأثير على نصوص iptables البرمجية","تظهر المشكلة حين يفحص نص برمجي خارجي ‏(مراقبة، أو Ansible، أو قواعد UFW)‏ `iptables` للتحقق من وجود قواعد Docker:\n\n```bash\niptables -L DOCKER 2>&1\n```\n\nمع خلفية nftables، هذه السلسلة فارغة أو غائبة. يُعيد النص خطأً بينما Docker يعمل بشكل مثالي. هذا ليس فشلاً في Docker — أداة التدقيق لم تعد تنظر في المكان الصحيح.\n\nلفحص القواعد الفعلية:\n\n```bash\nnft list ruleset | grep -A 20 'docker'\n```",{"type":53,"title":81,"steps":82},"الخطوة 4 — تقييم مخزن صور containerd وتفعيله",[83,86],{"title":84,"body":85},"التحقق من برنامج تشغيل التخزين الحالي","```bash\ndocker info | grep 'Storage Driver'\n```\n\nعلى VPS مُحدَّث إلى v29 بدون تغييرات في الإعداد، تحصل عادةً على `Storage Driver: overlay2`. مخزن containerd اختياري في v29 — لا يُفعَّل تلقائياً. سيصبح الافتراضي في v30.",{"title":87,"body":88},"تفعيل مخزن containerd (اختياري، يُنصح به قبل v30)","لتفعيل مخزن containerd في v29 والاستعداد للهجرة قبل فرضها في v30، أضف المفتاح التالي إلى `\u002Fetc\u002Fdocker\u002Fdaemon.json`:\n\n```bash\n{\n  \"features\": {\n    \"containerd-snapshotter\": true\n  }\n}\n```\n\nأعد تشغيل daemon:\n\n```bash\nsystemctl restart docker\n```\n\nللتحقق:\n\n```bash\ndocker info | grep 'Storage Driver'\n# Storage Driver: overlayfs\n```",{"type":90,"title":91,"headers":92,"rows":96},"comparison","توافق الأدوات الخارجية مع Docker Engine v29",[93,94,95],"الأداة","حالة التوافق مع v29","الإجراء الموصى به",[97,101,105],[98,99,100],"**Dockge** (حتى ‏1.4.1‏ مشمولاً)","غير متوافق: يستدعي daemon الخاص بـ Dockge مسارات API مُزالة في v29. لا يبدأ اللوحة بعد تحديث Docker.","تحديث Dockge إلى الإصدار ‏1.4.2‏ أو أعلى. التحقق من ملاحظات الإصدار قبل `apt upgrade` على أي VPS يستضيفه.",[102,103,104],"**Portainer** (Community Edition \u003C ‏2.21‏)","متوافق جزئياً: الواجهة تعمل، لكن بيئات Docker المستقلة قد تُظهر أخطاءً في عروض الشبكة. الإصدار ‏2.21‏ يُصلح استدعاءات nftables.","تحديث Portainer عبر `docker pull portainer\u002Fportainer-ce:latest` ثم `docker compose up -d` قبل ترقية Docker Engine.",[106,107,108],"**CasaOS App Store**","توافق جزئي موثَّق: التطبيقات المُنشَرة تستمر في العمل، لكن مدير التطبيقات قد يُبلّغ عن أخطاء عند فحص الصور إذا كان مخزن containerd مُفعَّلاً.","إبقاء مخزن containerd في وضع الإيقاف ‏(افتراضي v29)‏ على VPS التي تعمل بـ CasaOS حتى صدور إصدار تصحيحي. الاختبار على بيئة نسخة قبل أي تحديث.",{"type":110,"title":111,"body":112},"tip","اختبر الهجرة على لقطة قبل لمس بيئة الإنتاج","يتيح لك VPS بصلاحية root ولقطات فورية التحقق من كل خطوة في هذه الهجرة دون مخاطرة. أنشئ لقطة باسم `before-docker-v29`، نفّذ الهجرة الكاملة، تحقق من مكدّساتك، ثم احذف اللقطة. إذا حدث خطأ في الطريق، يُعيد الاستعادة VPS إلى حالته الأولية في أقل من خمس دقائق.",{"type":35,"title":114,"body":115},"استكشاف الأخطاء — أخطاء حقيقية وحلول","تُغطّي السيناريوهات التالية غالبية الحوادث المُلاحَظة خلال هجرات Docker v29 على أساطيل VPS.",{"type":53,"title":117,"steps":118},"سيناريوهات الأخطاء الشائعة",[119,122,125,128,131],{"title":120,"body":121},"الخطأ: `client version X.XX is too old. Minimum supported API version is 1.44`","**السبب**: الملف الثنائي المستقل `docker-compose` v1 لا يزال موجوداً ويحاول التواصل مع daemon الإصدار v29.\n\n**الحل**:\n\n```bash\napt remove docker-compose\napt install docker-compose-plugin\ndocker compose version\n```\n\nإذا كان الملف الثنائي مُثبَّتاً يدوياً ‏(خارج apt)‏، ابحث عنه:\n\n```bash\nwhich docker-compose\nrm \u002Fusr\u002Flocal\u002Fbin\u002Fdocker-compose\n```",{"title":123,"body":124},"الخطأ: `docker-compose: command not found` بعد `apt upgrade`","**السبب**: تمت إزالة حزمة `docker-compose` ‏(v1)‏ أثناء التحديث، ولم تُثبَّت إضافة v2.\n\n**الحل**:\n\n```bash\napt install docker-compose-plugin\n```",{"title":126,"body":127},"الخطأ: `iptables: No chain\u002Ftarget\u002Fmatch by that name` في نص مراقبة","**السبب**: نصك البرمجي يفحص سلسلة `DOCKER` في iptables، لكن Docker v29 مع nftables لا يكتبها هناك بعد الآن.\n\n**الحل**: استبدل فحص iptables بفحص nftables:\n\n```bash\nnft list ruleset | grep -c 'docker'\n```\n\nإذا كان العدد أكبر من صفر، فقواعد Docker موجودة في nftables.",{"title":129,"body":130},"Dockge لا يبدأ بعد التحديث","**السبب**: Dockge ‏1.4.1‏ وما قبله يستدعي مسارات API غائبة من Docker Engine v29.\n\n**الحل**:\n\n```bash\ncd \u002Fopt\u002Fdockge\ndocker compose pull\ndocker compose up -d\n```",{"title":132,"body":133},"الحاويات لا تستجيب على منافذها بعد إعادة تشغيل daemon","**السبب**: عند أول إعادة تشغيل لـ `dockerd` في وضع nftables، تُعاد كتابة قواعد NAT في الخلفية الصحيحة، لكن بعض التوزيعات تعاني تعارضاً بين خدمة `iptables-legacy` وnftables.\n\n**الحل**:\n\n```bash\nsystemctl stop docker\nsystemctl disable iptables\nsystemctl start docker\n```\n\nثم تحقق من إعادة تشغيل الحاويات وكشف المنافذ:\n\n```bash\ndocker compose up -d\ndocker ps --format 'table {{.Names}}\\t{{.Ports}}'\n```",{"type":35,"title":135,"body":136},"تجهيز أسطولك لتجنّب الحادثة التالية","هجرة Docker v29 المُدارة جيداً ليست حدثاً منفرداً — بل فرصة لوضع الممارسات التي تمنع الطارئ الليلي التالي.\n\n**أوقف تحديث Docker تلقائياً في `apt`.** على VPS العملاء، امنع Docker من التحديث أثناء `apt upgrade` غير المُشرَف عليها:\n\n```bash\napt-mark hold docker-ce docker-ce-cli containerd.io\n```\n\nأزل الإيقاف ‏(`apt-mark unhold`)‏ فقط حين تكون مستعداً للهجرة، بعد الاختبار على لقطة.\n\n**أتمتة تدقيق الأسطول.** يستغرق playbook Ansible الذي يتحقق من إصدار API على كل VPS أقل من ساعة لكتابته.","‏VPS‏ جاهزة لـ Docker v29 — مع لقطات وصول root","تحتاج الوكالة التي تُدير عدة VPS لعملائها إلى بنية تحتية Docker متجانسة، مُنظَّمة بإصدارات ومُجهَّزة للتحديثات الخارجية. تُوفّر ServOrbit ‏VPS‏ بصلاحية root وعنوان IPv4 مخصص ولقطات فورية — لاختبار كل هجرة أولاً على بيئة نسخة، لا على خادم عميل إنتاجي.","اكتشف خوادم VPS Cloud","\u002Fsolutions\u002Fagences",[142,157,178],{"id":143,"slug":144,"slugs":145,"title":149,"excerpt":150,"readTime":17,"views":18,"isPinned":19,"noindex":19,"publishedAt":151,"updatedAt":152,"category":153,"categories":154,"featuredImage":29,"bgImage":30,"posterImage":156,"relatedSolution":29},229,"docker-compose-في-الإنتاج-قائمة-التحقق-من-10-نقاط",{"fr":146,"en":147,"ar":144,"es":148},"docker-compose-production-checklist","docker-compose-in-production-10-point-checklist","checklist-docker-compose-en-produccion","Docker Compose في الإنتاج: قائمة التحقق من 10 نقاط","‏قائمة تحقق ‎Docker Compose‎ للإنتاج: 10 إعدادات، فحوصات صحية، أسرار، تراجع، استكشاف الأخطاء، والانتقال من ‎docker-compose v1‎ إلى ‎docker compose‎ على ‎Ubuntu 26.04‎.","2026-08-06T00:00:00+00:00","2026-10-23T13:27:09+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":25},[155],{"id":23,"name":24,"slug":25,"color":26,"icon":25},"\u002Fblog\u002Fcovers\u002Fdocker-compose-production-checklist-poster.svg",{"id":158,"slug":159,"slugs":160,"title":164,"excerpt":165,"readTime":166,"views":18,"isPinned":19,"noindex":167,"publishedAt":168,"updatedAt":21,"category":169,"categories":175,"featuredImage":29,"bgImage":30,"posterImage":177,"relatedSolution":29},224,"التطبيقات-المستضافة-ذاتيا-روتين-التصحيحات",{"fr":161,"en":162,"ar":159,"es":163},"routine-correctifs-apps-self-hosted","self-hosted-apps-the-patching-routine","apps-self-hosted-rutina-de-parches","التطبيقات المستضافة ذاتيًا: روتين التصحيحات","الجرد ونشرات الأمان ونافذة التصحيح والنسخ الاحتياطي والتحقق: الروتين الذي تفتقده معظم المنظومات المستضافة ذاتيًا.",4,true,"2026-08-05T00:00:00+00:00",{"id":170,"name":171,"slug":172,"color":173,"icon":174},8,"الأمان والمراقبة","securite-monitoring","bg-rose-500\u002F10 text-rose-400","security",[176],{"id":170,"name":171,"slug":172,"color":173,"icon":174},"\u002Fblog\u002Fcovers\u002Froutine-correctifs-apps-self-hosted-poster.svg",{"id":179,"slug":180,"slugs":181,"title":185,"excerpt":186,"readTime":187,"views":188,"isPinned":19,"noindex":19,"publishedAt":189,"updatedAt":21,"category":190,"categories":194,"featuredImage":29,"bgImage":30,"posterImage":196,"relatedSolution":29},236,"أتمتة-إدارة-خوادم-vps-باستخدام-ansible",{"fr":182,"en":183,"ar":180,"es":184},"ansible-automatiser-serveurs-vps","automating-vps-server-management-with-ansible","automatizar-servidores-vps-con-ansible","أتمتة إدارة خوادم VPS باستخدام Ansible","تعرّف على كيفية أتمتة إدارة أسطول خوادم VPS باستخدام ‎Ansible‎: الجرد والـ playbooks والأدوار والـ Vault لبنية تحتية قابلة للتكرار.",10,2,"2026-08-08T00:00:00+00:00",{"id":188,"name":191,"slug":192,"color":193,"icon":192},"الأتمتة","automatisation","bg-brand-action\u002F10 text-brand-action",[195],{"id":188,"name":191,"slug":192,"color":193,"icon":192},"\u002Fblog\u002Fcovers\u002Fansible-automatiser-serveurs-vps-poster.svg",1794270334397]